【问题标题】:In GCC, how can I mute the '-fpermissive' warning?在 GCC 中,如何使“-fpermissive”警告静音?
【发布时间】:2012-06-11 13:07:31
【问题描述】:

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

到目前为止,我在包含文件时将-fpermissive 选项设置为diagnostic pragma;类似:

#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 does not have it)。

我可以模仿这种行为吗?

【问题讨论】:

  • -fno-permissive 是默认值。 -fpermissive 并没有标志的“负面”和“正面”版本。也就是说,你不应该使用它。修复代码!即使它不是你的。
  • -fno-permissive 不是默认值,因为该选项不存在。但是,如果它确实存在,它将具有的行为将是默认值。我可以修复代码,但它似乎更像是一种解决方法......无论如何,修复整个包含的标题集并不是一个真正的选择。
  • 这正是我的意思。 -fpermissive 是这里的黑客/解决方法。无论如何,我们在谈论什么代码。也许有更好的选择。
  • 我知道我不应该使用标志,但我必须使用库;它已经被广泛使用:切换到替代方案不是一种选择。鉴于上下文,我想修复标题是可以的。
  • 我为此在 GCC 中提交了一个回归错误:gcc.gnu.org/bugzilla/show_bug.cgi?id=81787

标签: c++ gcc warnings pragma


【解决方案1】:

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


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

Bug 81787. [5/6/7/8 Regression] #pragma GCC diagnostic warning "-fpermissive" no longer

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

【讨论】:

  • 嗯。我对无法关闭此功能的论点印象不深。 “更改 C++ 语言的含义”、“将关于不合格代码的诊断降级为警告”、bonnet blanc、blanc bonnet。
【解决方案2】:

其中一个应该可以满足您的要求:

#pragma GCC diagnostic ignored "-fpermissive"

#pragma GCC diagnostic ignored "-pedantic"

“忽略”是您完全压制诊断的方式,由于历史原因,-fpermissive 的倒数是 -pedantic

【讨论】:

  • 感谢您的回复!你知道我在哪里可以找到提到 -pedantic-fpermissive 的倒数吗?
  • 不幸的是,它没有明确记录。您可以在此处阅读有关-fpermissive 的信息:gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/…-pedantic 在此处:gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/… 如果您在字里行间阅读,您可能会明白发生了什么是 C++ 编译器将 -pedantic-errors 作为其默认状态.但是如果不指向实际代码,我无法向你证明这一点......
  • ... 而且他们的 VCS 没有在线交叉引用索引,所以如果不下载所有代码并运行一堆 greps,我就找不到相关的实际代码,我今天早上没有时间。对不起。
  • 没问题,谢谢!我最终会尝试您的解决方案,看看它是否有助于解决我的问题。
  • “忽略”的反义词是什么? (我只想为一段代码恢复,如何恢复?)
猜你喜欢
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2012-03-04
  • 2015-02-20
相关资源
最近更新 更多