Fla*_*ire 6 c++ g++ compiler-warnings suppress-warnings
我有一个奇怪的 g++ 行为,当显示任何其他警告时,它会显示有关无法识别的命令行选项的警告。
\n\n例子:
\n\nstruct Foo{virtual int bar() = 0;};\nstruct Bar:public Foo{int bar() {return 0;} };\n\nint main(){}\nRun Code Online (Sandbox Code Playgroud)\n\n编译g++-5 -Wsuggest-override -Wno-c99-extensions -std=c++11 a.cpp甚至g++-5 -Wsuggest-override -Wno-c99-extensions a.cpp显示:
a.cpp:2:27: warning: \xe2\x80\x98virtual int Bar::bar()\xe2\x80\x99 can be marked override [-Wsuggest-override]\n struct Bar:public Foo{int bar() {return 0;} };\n ^\ncc1plus: warning: unrecognized command line option \xe2\x80\x98-Wno-c99-extensions\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n\n添加:当我编译时没有警告/错误,g++-5 -Wno-c99-extensions a.cpp因此该选项通过使用 CMAKE 检查CHECK_CXX_COMPILER_FLAG
这让我很困扰,因为我们使用 Werror 但通过 Wno-error=... 出现异常,然后当任何(非错误)警告显示为“无法识别的命令行选项”时,它就会退出
\n\n这是已知的/预期的吗?如何预防?
\n如果您不想收到有关无法识别的命令行选项的警告,请不要使用无法识别的命令行选项:-Wno-c99-extensions从来都不是有效的 GCC 选项(我相信这是一种铿锵声)。只需将其从构建命令中删除即可。
至于为什么只有在出现另一个警告时才会发出警告,这种行为似乎违反直觉,但实际上是故意的并记录在案:
-Wno-foo 未给出警告“无法识别的命令行选项”
从 GCC 4.4 开始,正如 GCC 手册中所解释的:当请求无法识别的警告选项时 (
-Wunknown-warning),GCC 会发出一个诊断,指出该选项无法识别。但是,如果-Wno-使用该表单,则行为会略有不同:-Wno-unknown-warning除非正在生成其他诊断信息,否则不会生成任何诊断信息。这允许旧编译器使用新-Wno-选项,但如果出现问题,编译器会警告存在无法识别的选项。(有关此更改的历史记录,请参阅 PR28322)这可能会破坏检查
-Wno-foo选项的配置测试。解决方案是测试肯定形式 (-Wfoo) 或使用触发某些其他警告的测试用例进行测试。
事实上,Google 上的邮件列表线程有一些结果,其中软件开发人员遇到了这个“问题”,特别是使用 CMake,并对他们的构建脚本进行了一些简单的修复以“修复”它。
| 归档时间: |
|
| 查看次数: |
13226 次 |
| 最近记录: |