抑制GCC警告

4

我有这段代码:

#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]没有其他指令。 -Wall不起作用

你有一个示例代码行,编译器会输出错误诊断吗?你确定没有其他指令会覆盖你的指令吗? - harper
可以尝试使用"-Wall",而不是使用"-Wcomment"。 - Chaithra
是的,有两行错误:/------ 为8022/8026设置模拟输出 --------- /*Exp8K WORD CALLBACK AnalogOutHex_8K(DWORD dwBuf[], float fBuf[],警告:注释中有“/*”[-Wcomment] - user3243625
3个回答

2

当编译C++时,预处理器发出的GCC警告不能通过任何#pragma抑制,只能在编译C时使用#pragma抑制。您正在编译为C++(并且不应将问题标记为C)。这是一个简单的测试用例:

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

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

鉴于pragma无法起作用,您应该采取其他方法。如果您可以修改头文件,请更改注释。如果您无法更改头文件,则可以将包含该头文件的特定目录标记为系统头文件目录(使用-isystem命令行选项)。


2
如果你可以修改 `header.h`,那么你可以使用 `#pragma GCC system_header` 将它定义为一个系统头文件。否则,你可以使用 `-isystem` 将其添加到你的 gcc 命令行中。

除了由 `#warning` 生成的警告以外,当 GCC 处理系统头文件时,所有警告都将被抑制。


如果您可以修改 header.h,那么更简单的方法就是将注释更改为GCC不会警告的内容。(我认为原帖作者已经意识到这一点,所以我认为原帖作者可能无法修改 header.h。) - user743382
确实。为了完整起见,全局的-Wno-comment也是另一种选择,如果想要确保来自header.h的其他警告仍然显示(在这种情况下不需要,但对于其他遇到此问题的人可能是有用的)。 - user743382

0

你没有包含完整的cpp文件。我猜测之前的某个include已经包含了一些头文件。这些头文件可能有头文件保护,防止头文件被多次包含。因此,#pragma实际上并没有起到任何作用。

你最好将#pragma和include移到头文件的顶部,在包含其他内容之前。记住,你也可以推入和弹出诊断#pragma。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接