특정 조건이 성립할 때나 조건이 성립하지 않을 때 지정한 범위 내의 문장을 컴파일하거나 무시하고 컴파일하지 않는 것이 바로 조건부 컴파일이다. 조건부 컴파일의 전처리기 지시자에는 #if, #elif, #else, #endif, #ifdef, #ifndef 등이 있다.
일단 제일 많이 사용되는 #if, #elif, #else, #endif를 보자. 형식은 아래와 같으며, 수식 1이 참이면 실행 1을 컴파일하고, 수식 1이 거짓이고 수식 2가 참이면 실행 2를 컴파일한다. 모든 수식이 거짓이면 실행 n을 실행한다.
#if 수식 1
실행 1
#elif 수식 2
실행 2
……
#else
실행 n
#endif
if, else if의 사용과 같은 느낌이 들지 않는가? 사용이 똑같다. 전처리가 되어 있다는 것으로 인해 컴파일하는 코드의 길이가 달라질 수 있기 때문에 특정 환경, 특정 옵션에 맞는 프로그램을 개발하고자 할 때 많이 쓴다. C로 만들어진 프로그램에서 설치 옵션이나 실행 옵션 등이 있는 경우에 많이 이용하고, 운영체제 같은 큰 프로그램을 짜면 반드시 보게 될 것이다.
이건 아래의 예시를 보면 더 쉽다. 설명하지 않은 #ifndef가 있는데, 이건 정의되지 않았을 경우를 나타낸다. NAME이 정의되어 있기 때문에 NAME이 정의되었다는 문장이 출력되고 ADDRESS는 정의되지 않았기 때문에 #ifndef에 맞춰 정의되지 않았다는 문장이 출력된다.