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

Fr0*_*Bit 15 c++ gcc warnings pragma

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

在msvc中我们可以这样做:

#pragma warning(push, 0)
// Code that produces warnings...
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)

在clang我们可以做到这一点:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wall"
#pragma clang diagnostic ignored "-Wextra"
// Code that produces warnings...
#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

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

在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
Run Code Online (Sandbox Code Playgroud)

但是在GCC中传递-Wall和-Wextra在诊断忽略的pragma中并不像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
Run Code Online (Sandbox Code Playgroud)

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

Hea*_*avy 2

文档说:

\n\n
\n

目前只能控制警告(通常由 \xe2\x80\x98-W...\xe2\x80\x99 控制),而不是全部。使用-fdiagnostics-show-option确定哪些诊断是可控的以及哪个选项控制它们。

\n
\n

  • 当我说所有受控警告时,我并不是指特定的翻译单元,而是指 Gcc 提供的所有受控警告 (2认同)