在GCC中抑制-Wunknown-pragmas警告

31
我试图忽略来自某些第三方头文件的警告,例如:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunknown-pragmas"
#pragma GCC diagnostic ignored "-Wreorder"

#include <some_3rd_party_header.h>

#pragma GCC diagnostic pop

这种方法通常可以工作,但对于未知的pragma警告却不起作用(我仍然会收到这些警告)。

为什么它可以处理其他警告,而不能处理这个?有没有人可以证实这种行为?

我正在Debian下使用带有-Wall-std=c++0x参数的g++(版本4.7.1)。


1
嗯,gcc会尊重抑制,而g ++则不会。 -Wno-unknown-pragmas 是一个选项吗? - Daniel Fischer
@DanielFischer 我猜您是指将其作为编译器的命令行参数? 这将禁用我自己代码中的警告,这是我不想要的。 - Robert Hegner
1
好的,可以理解。也许你可以尝试将这些头文件包含为系统头文件,就像这里建议的那样? - Daniel Fischer
这确实是一个不错的解决方案,也是我一开始的首选。但是我正在使用Eclipse(自动生成的make文件),而Eclipse似乎没有提供将包含目录标记为系统包含目录的方法。因此,它总是使用“-I”而不是“-isystem”。 - Robert Hegner
可能与此错误相关:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - sigy
1个回答

31

我也遇到过这种烦恼。根据 GCC 的 man 手册,-Wall 会为您打开 -Wunknown-pragmas,因此只需在 -Wall 后面手动使用 -Wno-unknown-pragmas 来禁用它。

有一个 GCC 的功能请求可以使用 #pragma GCC diagnostic 实现:


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