gpt4 book ai didi

c - 警告 : case not evaluated in enumerated type?

转载 作者:太空狗 更新时间:2023-10-29 16:37:20 26 4
gpt4 key购买 nike

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

警告:case 值不在枚举类型“SomeConstants”(又名“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() 语句的表达式转换为 int,这样它就不会/不能执行该检查。

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

关于c - 警告 : case not evaluated in enumerated type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11076941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com