#if宏如何在C中工作?

时间:2015-01-31 19:41:20

标签: c macros c-preprocessor

MyMacros.h:

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 ???

1 个答案:

答案 0 :(得分:0)

您正在混淆预处理和编译。

C预处理器无法理解行int const TESTING = 1;,它不知道TESTING的值。实际上,C编译器都不能在编译时使用该值(与C ++不同,更好地支持const表达式)。

C中的常见模式是使用#define指令定义常量(同样,与C ++不同):

#define TESTING 1

请注意此行末尾没有分号。编译器需要分号,而不是预处理器。