#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
并注意此行末尾没有分号。编译器需要分号,预处理器不需要。
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
并注意此行末尾没有分号。编译器需要分号,预处理器不需要。