27

我包含来自第三方库的文件,该文件引发错误,可以降级为带有-fpermissive. 但是因为我不想用这些警告“污染”我的编译日志,所以我想完全禁用这些消息。

到目前为止,我在包含文件时使用诊断编译指示-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 版本也没有)。

我可以模仿这种行为吗?

4

2 回答 2

15

tldr:您无法在 GCC 4.7 之后关闭 fpermissive 输出。


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

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

Note that it is in the state "RESOLVED INVALID", so the inability to turn it off is the expected behavior and there are no plans to change it.

于 2018-07-20T16:38:16.820 回答
14

其中之一应该做你想做的事:

#pragma GCC diagnostic ignored "-fpermissive"

或者

#pragma GCC diagnostic ignored "-pedantic"

由于历史原因,“忽略”是您完全压制诊断的方式,与-fpermissiveis相反。-pedantic

于 2013-05-15T02:48:09.040 回答