조건부 컴파일

정의

  • #if, #elif, #else, #endif 등의 지시어와 해당 지시어가 가리키는 조건에 따라, 컴파일할 코드를 선택할 수 있게 하는 기능이다.
  • 이 때 if 등의 뒤에 오는 조건문은 반드시 참(True, 1 이상의 정수)과 거짓(False, 0)중 하나의 결과값을 가져야 한다.

사용법

1
2
3
4
5
6
7
8
9
10
#if 조건문
코드... // if 조건문에 해당하는 경우 실행됨

#elif 조건문
코드... // if 조건문에 해당하지 않고, elif 조건문에 해당하는 경우 실행됨

#else
코드... // if, elif 조건문에 모두 해당되지 않을 경우 실행됨

#endif // 조건부 컴파일 문 종료

예시

  • 아래와 같은 예시 코드가 있다고 해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define DEBUG_MODE ?
#define HONEY_POT ?
// 4가지 경우의 수 테스트 DEBUG 1/0 HONEY_POT 1/0

int main(){
#if DEBUG_MODE
    int a = 10, b = 20;
#elif HONEY_POT
    int a = 10, b = 10;
#else
    int a = 1, b = 2;
#endif
    printf("a * b = %d", a * b);
    return EXIT_SUCCESS;
}

DEBUG_MODEHONEY_POT 의 값에 따라 main 함수의 출력값은 아래와 같이 달라진다.

DEBUG_MODE HONEY_POT 출력값
1 0 a * b = 200
0 1 a * b = 100
1 1 a * b = 200
0 0 a * b = 2

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments