#if
#ifdef
#ifndef
#include <stdio.h>
#define DEBUG // DEBUG 매크로 정의
unsigned int count= 0;
int main() {
#ifdef DEBUG // DEBUG 매크로가 정의되어 있다면 #ifdef, #endif 사이의 코드를 컴파일
printf("Debug: [%d] %s %s %s line %d\\n", ++count, __DATE__, __TIME__, __FILE__, __LINE__);
printf("Debug: [%d] %s line %d\\n", ++count, __FILE__, __LINE__); // 보통 날짜까지는 필요가 없더라구
#define here printf("[%s]%d\\n", __FILE__, __LINE__)
#endif
return 0;
}
#undef
#undef 선행처리 지시자는 #define 선행처리 지시지와 정확히 반대되는 동작을 수행합니다.
즉, 이미 정의되어 있는 매크로를 취소하는 동작을 수행합니다.
따라서 #define 선행처리 지시자에 의해 정의되는 매크로가 치환하는 범위는 #define 지시자가 정의된 위치부터 #undef 지시자에 의해 취소되는 위치나 파일의 끝까지가 됩니다.
단, 위에서 살펴본 미리 정의된 매크로는 사용자가 임의로 정의를 취소할 수 없습니다.