C언어의 기능 중에 조건부 컴파일이라는 기능이 있습니다. 그 이름에서 알 수 있듯이 어떤 조건을 만족 시키면 컴파일을 하고, 만족하지 않으면 무시해버리는 기능입니다. 이때 사용하는 지시자에는 #if, #elif, #else, #endif, #ifdef, #ifndef 등이 있습니다.
형식은 다음과 같습니다.
#if 수식1
실행 코드1
#elif 수식2
실행 코드2
.
.
.
# else
실행 코드 n
#endif
실행 코드1
#elif 수식2
실행 코드2
.
.
.
# else
실행 코드 n
#endif
형식이 C언어의 if 문의 사용법과 같습니다. 해당 if 문이나 elif 문의 수식이 참이라면 해당 실행코드를 컴파일하고 다른 #if 들은 무시해버립니다. ( 일반 if 문과 같은 방식입니다. )
예제를 들어 설명을 해드리겠습니다. 다음과 같은 소스를 컴파일 해보도록 하겠습니다.
이제 저장을 하고 컴파일을 하고 실행을 해보도록 하겠습니다.
CONDITION 을 1로 정의 했기 때문에 #if 조건에 true가 되어 해당 소스 코드가 선택되어 컴파일 된 것을 볼 수 있습니다. 만일 CONDITION을 0으로 정의 했다면 False가 출력이 되었을 겁니다.
다음으로 #ifdef 를 알아보도록 하겠습니다. #ifdef는 "define되었는가"를 조건으로 받는 전처리기입니다. 즉, 해당 매크로가 #define 명령어로 정의되어 있다면 그 부분을 컴파일하고 그렇지 않으면 컴파일 하지 않는 것을 말합니다.
예제를 보도록 하겠습니다. 다음 소스코드를 타이핑하도록 합니다.
이 소스를 컴파일하고 실행해보도록하겠습니다.
위에 #define 을 사용해서 DEFINE 이라는 매크로를 정의했으므로, 해당 소스코드가 컴파일되어 실행이 되게 됩니다.
조건부 컴파일은 알아두면 디버그라든지 여러 가지 편리한 점이 많이 있습니다.