首先,我希望它在出现警告时停止。但我也想打印出一些信息性消息(例如“回来实现这个!”)。
不幸的是,我的编译器不支持 #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/