2015-01-31 54 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編譯器在編譯時都不能使用該值(與C++不同,const表達式的支持更好)。

它是用C常見的模式使用#define指令(再次,與C++)定義常量:

#define TESTING 1 

並注意不存在分號的在該行的末尾。分號需要編譯器,而不是預處理器。

+0

所以我想用''#define TESTING 1'來代替那個工作嗎? – codehitman 2015-01-31 19:46:20

+0

是的,它會工作。 – 2015-01-31 19:47:46

+0

對不起,我收到以下錯誤:「#define TESTING 1;」中的「error:token」;「在預處理器表達式中無效」; – codehitman 2015-01-31 19:49:41