【问题标题】:C error directive defined behaviorC 错误指令定义的行为
【发布时间】: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


【解决方案1】:

OP 写道:

现在我隔离了示例,一切正常。重新构建它会暴露错误。我们使用 gcc 的 -D 参数来定义变量,例如测试。而在另一个文件中,这个相同的变量在未定义时被设置。在预处理器阶段,值从未定义时的值更改为 -D 定义。看起来 #error 和 #warning 指令在预处理的不同阶段运行。总结一下问题解决了,感谢cmets!

猜你喜欢
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多