如何禁用关于#warning 指令是 GCC 扩展的 GCC 警告?
Posted
技术标签:
【中文标题】如何禁用关于#warning 指令是 GCC 扩展的 GCC 警告?【英文标题】:How to disable GCC warning about the #warning directive being a GCC extension? 【发布时间】:2013-06-01 12:53:08 【问题描述】:当使用#warning
指令时,我得到的不是一个警告,而是两个 - 我生成的一个,加上一个额外的
warning: #warning is a GCC extension [enabled by default]
.
我可以使用-Wno-cpp
抑制#warning 指令的结果本身,但这与我想要的相反。
我可以改用#pragma message()
来解决这个问题,但这似乎使#warning 指令变得毫无意义——有没有办法抑制这个警告警告?
【问题讨论】:
你传递给 GCC 的选项是什么? 在这种情况下是-g -static -static-libgcc -Wall -Wextra -pedantic -Wno-vla -Wsizeof-pointer-memaccess -Wmissing-declarations -march=native -fexceptions -fexpensive-optimizations -flto -O3 -std=c++1y -fsanitize=address
- 请参阅下面的答案,我意识到这是负责任的 -pedantic 选项。
【参考方案1】:
啊,-pedantic
选项似乎启用了此警告,并且似乎没有针对它的特定覆盖,就像大多数其他 GCC 警告一样。删除 -pedantic
会消除有关警告的警告。
【讨论】:
【参考方案2】:#ifdef __GNUC__
#warning "no warning here!"
#endif
使用或不使用 gcc 都可以编译,即使使用 -pedantic
,但它仍然会发出警告(如果警告升级为错误,则会失败)。
更新: 根据this related question,没有干净的解决方案可以选择性地禁用有关 gnu 特定 #pragma s 的警告
【讨论】:
当然它会编译,无论如何,但这并不能消除警告:warning: #warning is a GCC extension [enabled by default]
是的,我自己也意识到了这一点。绝望地寻找一个编译指示来关闭该死的东西。 (添加#pragma GCC diagnostic ignored "-Wunknown-pragmas"
似乎不起作用。)【参考方案3】:
实际上,以下应该可以工作。有了它,您可以抑制/忽略 gcc 警告。
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcpp"
...
#pragma GCC diagnostic pop
【讨论】:
虽然这是个好主意,但恐怕这不适用于 -pedantic 警告。在此处查看测试代码:coliru.stacked-crooked.com/…以上是关于如何禁用关于#warning 指令是 GCC 扩展的 GCC 警告?的主要内容,如果未能解决你的问题,请参考以下文章