✅ 목표 (Goal)

✅ 내용 (Contents)

#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 지시자에 의해 취소되는 위치나 파일의 끝까지가 됩니다.

단, 위에서 살펴본 미리 정의된 매크로는 사용자가 임의로 정의를 취소할 수 없습니다.