c - -Werror 导致编译器在#warning 处停止。我能做些什么来防止这种情况发生?

标签 c gcc embedded c-preprocessor preprocessor-directive

首先,我希望它在出现警告时停止。但我也想打印出一些信息性消息(例如“回来实现这个!”)。

不幸的是,我的编译器不支持 #info , #message , #pragma message()

我知道有 -Wno-error=<something> ,但我的 google-foo 很弱,我似乎无法找出 <something>对于 #warning .我试过了 -Wno-error=warning ,那只是说“没有 -Wwarning”。同“warn”。

有什么建议吗?

就其值(value)而言,我使用的是 Tensilica Xtensa编译器 xt-xcc,它似乎是 GNU 的衍生产品,或者至少使用了 GNU 前端。版本为 8.0.0。

最佳答案

我不熟悉 Tensilica Xtensa 编译器 (xt-xcc),但是您可以使用标准 GCC

  #pragma GCC diagnostic warning "-Wcpp"

使 #warning 成为一个简单的警告(不是因为 -Werror 而导致的错误)。要使效果暂时,您可以在 #pragma GCC diagnostic push#pragma GCC 之间包含此 #pragma#warning诊断流行音乐

当我编译包含以下内容的文件时

    #pragma GCC diagnostic push
    #pragma GCC diagnostic warning "-Wcpp"
    #warning one
    #pragma GCC diagnostic pop

    #warning two

-Werror 使用 GCC 4.6.1(命令 gcc -c -Werror warning-test.c),我得到以下输出:

```lang-none
warning-test.c:3:2: warning: #warning one [-Wcpp]
warning-test.c:6:2: error: #warning two [-Werror=cpp]
cc1: all warnings being treated as errors
```

当我删除第二个 #warning 时,编译不会因错误而中断。

您还可以将 -Werror 编译器选项替换为 -Werror -Wno-error=cpp。我不知道 cpp 类别的警告包括什么其他影响(并且您可能在其他地方有一个合法的 #warning 您想要捕获为错误),所以暂时禁用特定 #warning 的错误并在之后立即恢复设置似乎更准确地满足您的要求。

使用 GCC 版本 4.8.4 和 4.9.2 给出了几乎相同的行为(仅额外打印了源代码行)。但是使用 GCC 版本 5.0.1(包含在 Ubuntu 15.04 (Vivid Vervet) 中的预发布版本)将给出两个警告,除非也包含选项 -Werror=cpp。所以看起来 -Werror 与较新的 GCC 不再暗示 -Werror=cpp 像以前一样,如果需要,它需要单独提供。

关于c - -Werror 导致编译器在#warning 处停止。我能做些什么来防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371718/

相关文章:

c++ - 线程通信理论

C 编程 - 指针(带增量)

c - 有没有什么设计工具可以让我获得C代码中不同函数的确切指令数

gcc - 在 GCC 中转储寄存器的值

c++ - 指向具有不同编译器的成员函数的指针

c - 预处理器宏定义是否需要在头文件中大写?

c - 一些简单的指针问题

c - fscanf 在行中间找到空白字段后无法正常工作

c++ - 如何使用自己的全局变量拷贝创建多个实例

c - 测量 cortex m7 上的时钟周期计数