c/c++语言开发共享警告:案例未以枚举类型进行评估?

我最近升级到新的编译器Clang LLVM 4.0,它很好。 就在这种情况下,它向我显示了一些旧的遗留代码的丑陋警告:

警告: case value not in enumerated type 'SomeConstants' (aka 'enum SomeConstants') [-Wswitch]

 switch (var) { case kConstant: case 3: case 4: case 8: case 35: //WARNING HERE :( // do my thing here break; case kOtherConstant: // do another thing here break; default: break; } 

var可以是枚举中定义的值之一,如下所示:

 typedef enum SomeConstants { kConstant, kOtherConstant, }; 

正如你所看到的那样,没有定义2,4,8,35(这就是编译器正在编译的原因),但实际上它们发生了(这是我正在使用的这个封闭源库的模糊部分)。

有没有办法我能以某种方式修改我的开关代码,所以我没有得到无害但恼人的警告? 现在我用它来沉默它:

 switch (var) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wswitch" case kConstant: case 3: case 4: case 8: case 35: #pragma GCC diagnostic pop ... 

我想知道是否有更优雅的解决方法。

    您可以将switch()语句的表达式强制switch()int以便它不会/不能执行该检查。

    毕竟,它实际上用于保存int值,而不是列出的枚举器之一。

      以上就是c/c++开发分享警告:案例未以枚举类型进行评估?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560491.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐