2012-06-07 47 views
12

我包含一个来自第三方库的文件,该文件引发了一个可以降级为-fpermissive的警告的错误。但是因为我不想用这些警告“污染”我的编译日志,所以我想完全禁用这些消息。在gcc中,如何将-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)。

我可以模仿这种行为吗?谢谢!

+1

'-fno-permissive'是默认值。 '-fpermissive',并且没有任何标志的“负面”和“正面”版本。这就是说,你不应该使用这个。修复代码!即使它不是你的。 – rubenvb

+1

-fno-permissive不是默认值,因为该选项不存在。但是,如果它确实存在,它的行为将是默认设置。我可以修复代码,但它看起来更像是一种解决方法......无论如何,修复整个包含的头文件并不是真正的选择。 – piwi

+0

这正是我的意思。 '-fpermissive'是这里的黑客/解决方法。反正我们在谈论什么代码。也许有更好的选择。 – rubenvb

回答

11

这也许有点晚了这一点,但其中一个应该做你想要的东西:

#pragma GCC diagnostic ignored "-fpermissive" 

#pragma GCC diagnostic ignored "-pedantic" 

“忽略不计”是你如何压制诊断完全和由于历史原因,-fpermissive的倒数是-pedantic

+1

感谢您的回复!你知道我在哪里可以找到关于“pedantic”与“-permissive”相反的内容吗? – piwi

+1

不幸的是它没有清楚的记录。你可以在这里阅读有关'-fpermissive':http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/C_002b_002b-Dialect-Options.html#index-fpermissive-154和'-pedantic'这里: http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Warning-Options.html#index-pedantic-257如果你在各行之间阅读,你可能会明白,发生的事情是C++编译器具有'-pedantic-errors'作为其默认状态。但我不能证明这一点,而没有指出实际的代码... – zwol

+0

...他们没有一个在线交叉引用索引他们的VCS,所以我不能找到实际代码的相关位而不下载它并且运行了一堆'grep',我今天早上没有时间。抱歉。 – zwol