【发布时间】:2015-06-29 18:55:59
【问题描述】:
在处理预处理器错误和警告时,我发现了以下内容:
使用时
#define TEST 4
#ifdef TEST
#error "Wrong Test"
#endif
它会在编译过程中显示错误,但是使用
#define TEST 4
#if (TEST==3)
#error "Wrong Test"
#endif
仍会显示错误,这是意料之外的。用#warning 更改#error 指令,这一切都按预期工作。
谁能解释一下如何解决这个问题,因为在我们的编译过程中,我们会因错误而不是警告而停止。
【问题讨论】:
-
你用的是什么编译器?这适用于我的 gcc。
-
匿名我的编译器是 arm gcc 4.8.1。但是我抽象了测试用例,确实这个案例正在工作,但在我的原始文件中它似乎不起作用。我会回到这个
-
现在我隔离了示例,一切正常。重新构建它会暴露错误。我们使用 gcc 的 -D 参数来定义变量,例如测试。而在另一个文件中,这个相同的变量在未定义时被设置。在预处理器阶段,值从未定义时的值更改为 -D 定义。看起来 #error 和 #warning 指令在预处理的不同阶段运行。总结一下问题解决了,感谢cmets!
标签: c c-preprocessor preprocessor-directive