#define을 이용하여 기호 상수 PI를 정의하는 것을 이전에 한 번 예제로 보여줬는데, 바로 그것이 매크로다. 즉, 프로그램을 작성할 때 반복 기술되는 명령어나 수식이 사용자가 별도의 이름을 부여할 수 있는 기능이 매크로다. 매크로에는 매개변수를 사용하지 않는 경우와 매개변수를 사용하는 경우가 있다. 정의 형식이 다른데, 형식은 다음과 같다.
#define 매크로이름 치환문자열
#define 매크로이름(매개변수들) 매개변수를포함하는치환문자열
배개변수를 사용하는 매크로는 예시를 보면 좀 알 수 있을 거 같다.
#define ADD(A, B) ((A) + (B))
ADD는 매크로 이름, A랑 B는 매개변수, ((A) + (B))는 치환 문자열이다. 여기서 주의할 사항은 매크로 이름인 ADD와 매개변수의 목록인 A,B 사이를 띄우면 안된다는 점이다.
일단 예시를 보도록 하자. 매개변수가 없는 매크로의 예시는 다음과 같다.
전처리를 하여 문장 중의 매크로가 해당 문자열로 바뀐 상황이다.
다음은 매개변수가 있는 매크로를 이용해 두 수 중에 큰 수를 구하는 프로그램이다.
매개변수가 있는 매크로는 함수와 거의 유사하지만, 컴파일 할 때 링크 과정을 거치지 않아도 되므로 함수를 불러오는 시간이 절약되는 장점이 있다.
이런 매크로를 정의하는 지시자뿐만 아니라 이미 정의된 매크로를 해제하는 지시자도 있는데, 바로 #undef문이다. 예시를 보도록 하자. 먼저 정의했던 SIZE 매크로를 실행 도중에 #undef로 해제한 다음에 다시 #define으로 정의하는 코드가 있다. 그로 인해 실행 결과가 바뀐다.