2013-04-14 48 views
7

我已经学会了,我可以把GCC,C:找出默认警告名称在使用的#pragma忽略

#pragma GCC diagnostic ignored "<warning>" 

到源文件的顶部,以抑制与这个特殊的警告源文件。但是,似乎有些名称不够具体。例如,

#pragma GCC diagnostic ignored "-Wwrite-strings" 

不会阻止显示警告信息,其确切名称没有给出GCC(4.7.2),取而代之的是,这些消息只能由[默认启用]紧随其后。我想我需要知道正确的警告名称,以便我可以在#pragma行中使用它们。我试过

-fdiagnostics-show-option, 

但是警告仍显示为[默认启用]。

是否有任何方法来识别这些警告,或者可以禁止与特定源文件相关的警告?

非常感谢!

+0

我认为,使用正确的选项是'-Wno-写strings' – Bechir

+0

如果我没有记错,这是全球范围内禁止所有相应的警告编译器选项。我想要做的只是禁用由某些源文件引起的警告。这就是为什么我尝试'#pragma'方法。不过谢谢你! – Guybrush

回答

2

您必须推送并弹出诊断状态。就像这样:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-function" 
    /* ignoring warning */ 

    int unused_function(void) { 
     return 1337; 
    } 
#pragma GCC diagnostic pop 
+0

所以我确实把源文件的所有功能放在编译指令之间,如你所示,用'-Wwrite-strings'。尽管如此,它并没有抑制来自这个文件的标签为“默认启用”的警告。 – Guybrush

+0

你能分享一下你的gcc命令行看起来像什么样的更多信息吗(即-Wall,-pedantic等等)?你得到了什么确切的警告? –

+0

我用'-pedantic -Wall -Wshadow -Winterinter-arith -Wwrite-strings'。如果我什么也没做,我会得到带有'-Wshadow','-Wunused-variable','-Wimplicit-function-declaration'和'默认启用'标签的警告。将'#pragma GCC诊断配置文件'“'放到相关源文件的顶部,我可以摆脱前三种警告类型,但是我不知道如何处理”默认启用“来自这些源文件的警告。 – Guybrush

相关问题