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

标签 c++ gcc warnings pragma

我正在寻找一种方法来抑制所有可能的警告,这些警告可能是我在 Gcc 中使用 pragma 指令获得的。我制作了一些守卫宏来帮助我从警告中消除第 3 方 header ,现在它们就像 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 中,我们也有类似的带有 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 警告标志列表(最好是在普通列表中)?

最佳答案

Documentation说:

At the moment only warnings (normally controlled by ‘-W...’) can be controlled, and not all of them. Use -fdiagnostics-show-option to determine which diagnostics are controllable and which option controls them.

关于c++ - 如何在 GCC 中使用 pragma 指令禁用所有警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049296/

相关文章:

c++ - 使用通用函数指针参数化函数模板的巧妙方法

c - 检查 __restrict 关键字可用性的好方法是什么?

c - "control reaches end of non-void function"是什么意思?

java - 警告 - 匿名子类(?)没有串行版本 UID

c++ - 具有大特征向量 LibSVM 的段错误

c++ - boost JSON 解析器在 MacOS 上转义引号,但在 Linux 上不转义

c++ - 未初始化和复制的指针变量的地址

GCC 无法编译 Go 程序

c - a[][] 和 (*a)[] 不等同于函数参数吗?

python - 在python中导入类时显示警告