76.1 조건부 컴파일 사용하기
조건부 컴파일은 #ifdef와 #endif 지시자를 사용하여 정의합니다. #ifdef에 매크로를 지정하면 해당 매크로가 정의되어 있을 때만 코드를 컴파일합니다.
#ifdef 매크로 코드 #endif
다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.
conditional_compile.c
#include <stdio.h> #define DEBUG // DEBUG 매크로 정의 int main() { #ifdef DEBUG // DEBUG 매크로가 정의되어 있다면 #ifdef, #endif 사이의 코드를 컴파일 printf("Debug: %s %s %s %d\n", __DATE__, __TIME__, __FILE__, __LINE__); #endif return 0; }
실행 결과
Debug: Oct 6 2015 23:30:18 c:\project\hello\conditional_compile\conditional_compile.c 8
먼저 #define으로 DEBUG라는 매크로를 정의합니다(조건부 컴파일에 사용할 매크로는 매크로 이름만 정의해도 됩니다). 그리고 다음과 같이 조건부 컴파일을 할 코드를 #ifdef, #endif로 묶어줍니다. 여기서 #ifdef DEBUG는 DEBUG 매크로가 정의되어 있다면 #ifdef, #endif 사이의 코드를 컴파일 합니다.
#ifdef DEBUG // DEBUG 매크로가 정의되어 있다면 #ifdef, #endif 사이의 코드를 컴파일 printf("Debug: %s %s %s %d\n", __DATE__, __TIME__, __FILE__, __LINE__); #endif
printf안에서 사용한 __DATE__, __TIME__, __FILE__, __LINE__는 컴파일러에서 제공하는 매크로이며 디버그 코드를 작성할 때 유용합니다.
- __DATE__: 컴파일한 날짜(실행 시점의 현재 날짜가 아님)
- __TIME__: 컴파일한 시간(실행 시점의 현재 시간이 아님)
- __FILE__: __FILE__ 매크로가 사용된 헤더, 소스 파일
- __LINE__: __LINE__ 매크로가 사용된 줄 번호
#ifdef, #endif가 전처리기 과정을 거치면 코드는 다음과 같이 바뀝니다.