在 GCC 中,如何静音 '-fpermissive' 警告?

问题描述 投票:0回答:3

我包含了来自第三方库的一个文件,该文件会引发错误,可以使用

-fpermissive
将其降级为警告。但因为我不想用这些警告“污染”我的编译日志,所以我想完全禁用此消息。

到目前为止,我在包含文件时使用

diagnostic pragma
设置了 -fpermissive 选项;像这样的东西:

#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-fpermissive"

#include <third-party-file.h>

#pragma GCC diagnostic pop

由于 GCC 通常提供“正”和“负”版本的

-f
标志,我考虑忽略“不允许”功能:

#pragma GCC diagnostic ignored "-fno-permissive"
#include <third-party-file.h>

但是似乎没有

-fpermissive
标志的“负”版本(我使用的是 GCC 4.6.3;但即使是 4.7.0 版本也没有)。

我可以模仿这种行为吗?

c++ gcc warnings pragma
3个回答
20
投票
tldr:GCC 4.7 之后无法关闭 fpermissive 输出。


只是将其发布在这里,以便它具有更高的可见性:不幸的是,

zwol 的答案(虽然是出于好意,并且可能对那些使用较旧 GCC 版本的人有帮助)不适用于较新版本的 GCC。从 GCC 4.8 及更高版本开始,您无法关闭 fpermissive 输出。 o11c 在他对 OP 的评论中提供了以下跟踪此错误的错误:

错误 81787。[5/6/7/8 回归] #pragma GCC 诊断警告“-fpermissive”不再

请注意,它处于“已解决无效”状态,因此无法将其关闭是预期行为,并且没有计划更改它。


15
投票
这可能有点晚了,但其中之一应该可以做你想做的事:

#pragma GCC diagnostic ignored "-fpermissive"

#pragma GCC diagnostic ignored "-pedantic"
“忽略”是完全压制诊断的方式,出于历史原因,

-fpermissive

 的倒数是 
-pedantic


0
投票
我找到了一种将其静音的方法,那就是将有问题的代码移至

-isystem

 标头中。

这是一个令人难以置信的不满意的解决方案,但我想我应该发布它,因为它对某些人来说可能是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.