C++ 如何压制",;“条件表达式中的枚举和非枚举类型”;GCC中的警告

C++ 如何压制",;“条件表达式中的枚举和非枚举类型”;GCC中的警告,c++,gcc,gcc-warning,C++,Gcc,Gcc Warning,我一直从第三方库(我不想调试)收到此警告,因此我非常希望能找到一种抑制此特定警告的方法。谷歌让我失望了,所以我来了。下面的标志不能消除这个警告吗 -Wno-enum-promotion 好吧,因为我找不到禁用此特定警告的方法,所以我求助于使用gcc的#pragma system_头。基本上,我是这样包装有问题的标题的: #if defined __GNUC__ #pragma GCC system_header #elif defined __SUNPRO_CC #pragma disable

我一直从第三方库(我不想调试)收到此警告,因此我非常希望能找到一种抑制此特定警告的方法。谷歌让我失望了,所以我来了。

下面的标志不能消除这个警告吗

-Wno-enum-promotion

好吧,因为我找不到禁用此特定警告的方法,所以我求助于使用gcc的#pragma system_头。基本上,我是这样包装有问题的标题的:

#if defined __GNUC__ #pragma GCC system_header #elif defined __SUNPRO_CC #pragma disable_warn #elif defined _MSC_VER #pragma warning(push, 1) #endif #include "foo.h" #if defined __SUNPRO_CC #pragma enable_warn #elif defined _MSC_VER #pragma warning(pop) #endif #如果已定义uuu GNUC__ #pragma GCC系统头 #elif已定义\uuuuSunpro\uCC #pragma禁用警告 #已定义的elif\u MSC\u版本 #杂注警告(按,1) #恩迪夫 #包括“foo.h” #如果已定义uuu SUNPRO\u CC #pragma启用警告 #已定义的elif\u MSC\u版本 #布拉格警告(pop) #恩迪夫
其中foo.h是有问题的标题。现在我只加入这个fooWrapper.h,问题就解决了。请注意,这也适用于其他一些编译器(MSC和SUNPRO),但我没有对其进行测试。

-Wno enum compare
绕过此警告


在gcc4.6及更高版本中,您可以使用pragma来抑制特定警告,并仅对特定代码块进行抑制,即:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wno-enum-compare" 
// Code that causes warning goes here
#pragma GCC diagnostic pop
push/pop用于保留代码处理前的诊断选项

这比使用
#pragma GCC system_头
来抑制所有警告要好得多。(当然,在较旧的gcc中,您可能会被
#pragma gcc system_头
方法“卡住”!)

以下是关于禁止gcc警告的一个很好的参考:

本页还介绍了如何使用
-fddiagnostics show option
找出控制特定警告的选项


当然,修复所有警告的根本原因通常比抑制它们要好得多!然而,有时这是不可能的。

不。事实上,gcc甚至似乎不承认这个选项。你从哪里知道这个选项的?它没有列在Thanx上,这个
#pragma GCC system_标题
将我从一堆无意义的警告中解救出来。