특정 조건에 따라 소스코드의 일부를 포함하거나 포함하지 않고 컴파일하도록 합니다.
#if 조건이 참이면 컴파일에 포함합니다.
다음과 같은 형식을 갖습니다.
#if 조건1
조건1이 참이면 컴파일에 포함
#elif 조건2
조건2가 참이면 컴파일에 포함
#else
조건이 모두 거짓이면 컴파일에 포함
#endif
구성은 if문과 유사합니다.
#else와 #elif는 상황에 따라 쓰이지 않을 수 있지만 #endif는 필수로 있어야 합니다.
#include <stdio.h>
#define A 1
#define B 2
#define C 3
#define CNUM 2
int main(void) {
#if CNUM == A
printf("매크로 상수 CNUM == %d\n", A);
#elif CNUM == B
printf("매크로 상수 CNUM == %d\n", B);
#elif CNUM == C
printf("매크로 상수 CNUM == %d\n", C);
#else
printf("매크로 상수 CNUM은 %d, %d, %d가 아닙니다.\n", A, B, C);
#endif
return 0;
}
조건부 컴파일은 컴파일 단계에서 포함/제외 합니다.
#if는 매크로 정의의 값을 비교하여 컴파일을 했다면
#ifdef는 매크로 정의가 되어있다면 컴파일 합니다.
#include <stdio.h>
#define A 0
int main(void) {
#if A
printf("매크로 상수 A는 참입니다.\n");
#endif
#ifdef A
printf("매크로 상수 A는 정의 되어 있습니다.\n");
#endif
return 0;
}
#if A 는 0은 거짓이기 때문에 컴파일에 포함하지 않습니다.
#ifdef A는 매크로 A가 정의 되어있기 때문에 컴파일에 포함됩니다.
#ifndef는 매크로 정의가 되어있지 않다면 컴파일 합니다. #ifdef의 반대 입니다.
#ifndef _MYMACRO_
#define _MYMACRO_
...
#endif
위의 코드는 헤더파일디자인에서 다루겠지만, 한번만 컴파일 해야 할 경우에 쓰이는 패턴입니다.