【发布时间】:2016-12-15 07:09:15
【问题描述】:
我正在使用支持 C99 子集的定制 gcc 编译器编写一些代码。使用编译器选项,我定义了一个这样的宏:
ENABLE_LOGGING=true
我在我的代码中这样使用它:
#if ENABLE_LOGGING
#define LOG(foo) { log(foo); }
#else
#define LOG(foo)
#endif
结果证明这并不可靠。有时使用包含代码的LOG,有时使用emtpy LOG(相同的项目,相同的编译器设置)。
将宏参数更改为:
ENABLE_LOGGING=1
一切正常。
我了解预处理器可能不知道true。但是,为什么它在大多数时候都有效?为什么我在编译不起作用的模块时没有收到警告或错误?
【问题讨论】:
-
ENABLE_LOGGING=true不是有效的 C 宏声明。你的意思是#define ENABLE_LOGGING true还是别的什么? -
我使用编译器选项定义它,而不是使用代码。以上是编译器选项使用的格式。
标签: c boolean c-preprocessor c99 preprocessor-directive