#if 宏在 C 中如何工作?

How does #if macro work in C?

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

它工作并打印消息。嗯???

你混淆了预处理和编译。

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

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

#define TESTING 1

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