我包含了来自第三方库的一个文件,该文件会引发错误,可以使用
-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 版本也没有)。
我可以模仿这种行为吗?
zwol 的答案(虽然是出于好意,并且可能对那些使用较旧 GCC 版本的人有帮助)不适用于较新版本的 GCC。从 GCC 4.8 及更高版本开始,您无法关闭 fpermissive 输出。 o11c 在他对 OP 的评论中提供了以下跟踪此错误的错误:
错误 81787。[5/6/7/8 回归] #pragma GCC 诊断警告“-fpermissive”不再
请注意,它处于“已解决无效”状态,因此无法将其关闭是预期行为,并且没有计划更改它。
#pragma GCC diagnostic ignored "-fpermissive"
或
#pragma GCC diagnostic ignored "-pedantic"
“忽略”是完全压制诊断的方式,出于历史原因,-fpermissive
的倒数是
-pedantic
。
-isystem
标头中。这是一个令人难以置信的不满意的解决方案,但我想我应该发布它,因为它对某些人来说可能是可行的。