매크로(Macro)와 전처리기(Preprocessor)는 소스 코드를 컴파일하기 전에 사전에 처리되는 단계이다. 전처리기는 소스 코드의 일부를 수정하거나 다른 코드로 대체하여 최종적으로 컴파일러에 전달하는 역할을 한다. 주로 코드의 재사용성과 간결성을 높이는 데 사용된다.
매크로는 전처리기에 의해 처리되는 이름과 값으로 구성된 식별자다. #define 지시문을 사용하여 정의되며 매크로 정의는 컴파일러가 소스 코드를 처리하기 전에, 매크로의 이름을 해당 값 또는 표현식으로 대체하는 작업을 수행한다. 이를 매크로 치환(Macro Substitution)이라고 한다.
전처리기는 매크로 처리 외에도 다른 기능을 수행할 수 있다. #include 지시문을 사용하여 헤더 파일을 포함하거나 #ifdef #ifndef #endif 등의 조건부 컴파일 지시문을 사용하여 조건부 코드 실행 등을 수행할 수 있다.
#define PI 3.141592
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main()
{
double radius = 5.0;
double dule = 2 * PI * radius;
int x = 10;
int y = 20;
int maxValue = MAX(x, y);
return 0;
}
전처리기는 컴파일 전에 PI와 MAX(x, y)를 각각 3.141592와 ((x) > (y) ? (x) : (y))로 대체한다.
PI는 매크로로 정의된 상수 값이고 MAX는 매크로로 정의된 '매크로 함수'다. 간단한 수식은 구현이 가능하지만 실제 함수처럼 복잡한 구조로는 만들 수 없다. 위에서 말한 #ifdef #ifndef #endif 등을 활용해 조건문도 구현 가능하다.