2015-01-31 3 views
0

MyMacros.h :#if 매크로는 C에서 어떻게 작동합니까?

int const TESTING = 1; 

#define INFO(MSG) fprintf(stderr, "INFO :: %s\n", MSG); 

MyProgram.c :

#if TESTING 
    INFO("File 'data.dat' opened correctly."); 
#endif 

메시지가 화면에 출력되지 않는다. 그러나 이렇게하면 :

#if TESTING < 1 

메시지를 인쇄하고 인쇄합니다. Hunh ???

답변

0

전처리와 컴파일이 혼란 스럽습니다.

int const TESTING = 1; 줄은 C 전처리기에 의해 이해되지 않고 TESTING 값을 알지 못합니다. 사실, C 컴파일러는 컴파일 타임에이 값을 사용할 수 없습니다 (const 표현을 더 잘 지원하는 C++과 다름).

그것은 C의 일반적인 패턴 (C++과는 달리, 다시)에 #define 지시어를 사용하여 상수를 정의하는 것입니다 :

#define TESTING 1 

을 그리고이 라인의 끝에 세미콜론이 없음을 확인합니다. 세미콜론은 전처리 기가 아닌 컴파일러에서 필요합니다.

+0

그래서 나는 그것을 대체 할 것이었다 :'#define TESTING 1'은 그 일을 할 것인가? – codehitman

+0

예, 작동합니다. –

+0

죄송합니다. "error : token"; "전처리 기의 표현식에서 유효하지 않습니다."#define TESTING 1; – codehitman

관련 문제