抑制GCC警告

时间:2014-04-21 08:44:25

标签: c++ gcc gcc-warning

我有代码:

#ifdef Q_OS_LINUX
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wcomment"
#include "header.h"
#pragma GCC diagnostic pop
#endif

我想要抑制与header.h相关的GCC警告消息以及header.h中包含的所有头文件。但我仍然有与header.h中包含的标题相关的'-Wcomment'警告。我怎么能避免这种情况?感谢

gcc 4.8.2

编辑:我得到的警告如下:

  

/ ------将模拟输出设置为8022/8026 --------- / Exp8K WORD   CALLBACK AnalogOutHex_8K(DWORD dwBuf [],float fBuf [],警告:“/ ”   在评论中[-Wcomment]肯定没有其他的pragma。 - 墙不起作用

3 个答案:

答案 0 :(得分:2)

编译C ++时,使用任何编译指示无法抑制预处理程序发出的GCC警告,编译C时只能通过编译指示来抑制它们。您正在编译为C ++(并且不应该将您的问题标记为C也是如此) )。这是一个简单的测试用例:

#pragma GCC diagnostic ignored "-Wcomment"
/* /* */

这在C ++模式下发出警告,但不在C模式下发出警告。

鉴于pragma不起作用,你应该采取其他方法。如果您可以修改标题,只需更改注释即可。如果无法更改标头,则可以将标头所在的特定目录标记为系统标头目录(使用-isystem命令行选项)。

答案 1 :(得分:1)

如果您可以修改header.h,则可以使用#pragma GCC system_header将其定义为system header。否则,您可以使用-isystem将其添加到gcc命令行。

  

GCC正在处理系统标题时,将禁止除“#warning”(参见“诊断”)生成的警告以外的所有警告。

答案 2 :(得分:0)

您尚未包含完整的cpp文件。我的猜测是早期的包含已经包含了一些头文件。这些头文件可能会有标题保护,以防止头文件被包含多次。因此#pragma并没有真正做任何事情。

最好的办法是在包含其他任何内容之前移动#pragmas并将其包含在头文件的顶部。请记住,您还可以推送和弹出诊断编译指示。