如何在GCC中使用pragma指令禁用所有警告

时间:2015-08-17 11:31:23

标签: c++ gcc warnings pragma

我正在寻找一种方法来抑制我可能通过pragma指令获得的所有可能的警告。我制作了一些警卫宏来帮助我让第三方标题从警告中消失,而现在它们对于msvc和clang来说就像魅力一样。我仍然缺少使用Gcc诊断编译指示的正确方法来抑制部分中的每个警告。让我举几个例子:

在msvc中,我们可以这样做:

#pragma warning(push, 0)
// Code that produces warnings...
#pragma warning(pop)

在clang中,我们可以这样做:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wall"
#pragma clang diagnostic ignored "-Wextra"
// Code that produces warnings...
#pragma clang diagnostic pop

中间的代码现在正在被警告保持沉默。

在Gcc中我们也有类似的pragma指令和clang,我想我可以尝试这样的事情:

#pragma GCC diagnostic push
#pramga GCC diagnostic ignored "-Wall"
#pragma GCC diagnostic ignored "-Wextra"
// Code that produces warnings...
#pramga GCC diagnostic pop

但是在GCC中传递-Wall和-Wextra的诊断忽略编译指示不像clang那样工作,并且不会禁用所有可能的警告。而不是通过一个特定的警告来禁用工作:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
void foo (int x) // No longer getting "unused parameter 'x'" warning
{
}
#pragma GCC diagnostic pop

因此,到目前为止,我能想到的唯一解决方法是制作一个包含所有GCC警告标志的长列表,并像上面一样使用它们。有更优雅的解决方案吗? 如果不是我可以获得完整的Gcc警告标志列表(有利地在普通列表中)?

1 个答案:

答案 0 :(得分:1)

Documentation说:

  

目前只能控制警告(通常由'-W ......'控制),并非所有警告。使用-fdiagnostics-show-option确定哪些诊断可以控制,哪个选项控制它们。

相关问题