【发布时间】: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