【问题标题】:How to suppress the "enumeral and non-enumeral type in conditional expression" warning in GCC如何在 GCC 中抑制“条件表达式中的枚举和非枚举类型”警告
【发布时间】:2009-06-19 14:21:49
【问题描述】:

我不断从第三方库(我不想调试)收到此警告,因此我非常感谢一种抑制此特定警告的方法。 Google 让我失望了,所以我来了。

【问题讨论】:

    标签: c++ gcc gcc-warning


    【解决方案1】:

    -Wno-enum-compare 绕过此警告。

    See also

    【讨论】:

      【解决方案2】:

      在 gcc4.6 及更高版本中,您可以使用编译指示来抑制特定的警告,并且只对特定的代码块进行抑制,即:

      #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_header 抑制所有警告要好得多。 (当然,在较旧的 gcc 中,您可能会“卡住”#pragma GCC system_header 方法!)

      这是一个很好的关于抑制 gcc 警告的参考:http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html

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

      当然,解决所有警告的根本原因通常比抑制警告要好得多!但是,有时这是不可能的。

      【讨论】:

        【解决方案3】:

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

        #if 定义了 __GNUC__ #pragma GCC system_header #elif 定义 __SUNPRO_CC #pragma disable_warn #elif 定义 _MSC_VER #pragma 警告(推,1) #万一 #include "foo.h" #如果定义了 __SUNPRO_CC #pragma enable_warn #elif 定义 _MSC_VER #pragma 警告(弹出) #万一

        其中 foo.h 是有问题的标头。现在我只包含这个 fooWrapper.h,问题就消失了。请注意,这也适用于其他一些编译器(MSC 和 SUNPRO),但我没有对其进行测试。

        【讨论】:

        • 谢谢,这个#pragma GCC system_header 把我从一堆无意义的警告中救了出来。
        【解决方案4】:

        以下标志不会消除该警告吗?

        -Wno-enum-promotion
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        相关资源
        最近更新 更多