如何禁用关于作为GCC扩展的#warning指令的GCC警告?
当使用如何禁用关于作为GCC扩展的#warning指令的GCC警告?,gcc,warnings,compiler-warnings,gcc-warning,Gcc,Warnings,Compiler Warnings,Gcc Warning,当使用#warning指令时,我得到的不是一个警告,而是两个-一个是我生成的警告,另一个是额外的警告 警告:#警告是一个GCC扩展[默认启用] 我可以使用-Wno cpp抑制#warning指令的结果本身,但这与我想要的相反 我可以通过使用#pragma message()来解决这个问题,但这似乎使得#warning指令毫无意义-没有办法抑制此警告吗?啊,似乎-pedantic选项启用了此警告,并且似乎没有特定的覆盖,与大多数其他GCC警告一样。删除-pedantic可以消除有关警告的警告 #i
#warning
指令时,我得到的不是一个警告,而是两个-一个是我生成的警告,另一个是额外的警告
警告:#警告是一个GCC扩展[默认启用]
我可以使用-Wno cpp
抑制#warning指令的结果本身,但这与我想要的相反
我可以通过使用
#pragma message()
来解决这个问题,但这似乎使得#warning指令毫无意义-没有办法抑制此警告吗?啊,似乎-pedantic
选项启用了此警告,并且似乎没有特定的覆盖,与大多数其他GCC警告一样。删除-pedantic
可以消除有关警告的警告
#ifdef __GNUC__
#warning "no warning here!"
#endif
将使用或不使用gcc编译,即使使用-pedantic
,但仍会发出警告(如果警告升级为错误,则会失败)
更新:
根据,没有干净的解决方案可以选择性地禁用有关gnu特定的#pragma s的警告。实际上,以下方法应该有效。这样,您就可以抑制/忽略gcc警告
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcpp"
...
#pragma GCC diagnostic pop
您传递给GCC的选项是什么?在本例中,它是
-g-static-static libgcc-Wall-Wextra-pedantic-Wno vla-Wsizeof pointer memaccess-Wmissing declarations-march=native-fexceptions-feexpensive optimizations-flto-O3-std=c++1y-fsanize=address
,请参见下面的答案,我意识到是-pedantic选项造成的。无论如何,它肯定会编译,但这并不能消除警告:warning:#warning是一个GCC扩展[默认启用]
是的,我自己才意识到这一点。绝望地寻找一个咒语来把这该死的东西一扫而光。(添加#pragma GCC diagnostic ignored“-Wunknown pragmas”
似乎不起作用。)虽然这是个好主意,但恐怕这对-pedantic警告不起作用。请参见此处的测试代码: