我正在寻找一种方法来抑制所有可能的警告,这些警告可能是我在 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 警告标志列表(最好是在普通列表中)?
最佳答案
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/