선행처리
- 컴파일 이전의 처리
- 삽입해 놓은 선행처리 명령을 단순 치환
- 매크로 명령문(선행 처리)은 파일 단위로만 유효

#include<stdio.h>
#pragma warning(disable:4996)
# define NAME "홍길동"
# define AGE 24
# define ADDR puts("주소 : 경기도 용인시\n");
main()
{
printf("이름 : %s\n", NAME);
printf("나이 : %d\n", AGE);
ADDR;
}
#include<stdio.h>
#pragma warning(disable:4996)
# define SQUARE(x) x*x
main()
{
int num = 20;
printf("square of num : %d\n", SQUARE(num));
printf("square of 3 : %d\n", SQUARE(3));
printf("square of -2 : %d\n", SQUARE(-2));
}
먼저 정의된 매크로도 매크로 정의시에 사용 가능
#include<stdio.h>
#pragma warning(disable:4996)
# define PI 3.14
# define PRODUCT(x, y) ((x)*(y))
# define CIRCLE(a) (PRODUCT((a), (a)) * PI)
main()
{
double rad = 2.1;
printf("반지름 %g인 원의 넓이 : %g\n", rad, CIRCLE(rad));
}
매크로 장점
- 실행 속도가 빠름
- 별도 함수를 정의하지 않아도 됨
매크로 단점
조건부 컴파일을 위한 매크로
- #if ~~ (#elif ... #else...) #endif : ~~가 참이라면
- #ifdef ~~ (#elif ... #else...) #endif : ~~가 정의되었다면
- #ifndef ~~ (#elif ... #else...) #endif : ~~가 정의되지 않았다면