我最近升级到新的编译器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;
}
Run Code Online (Sandbox Code Playgroud)
var
可能是枚举中定义的值之一:
typedef enum SomeConstants {
kConstant,
kOtherConstant,
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,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
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更优雅的解决方法.
归档时间: |
|
查看次数: |
5310 次 |
最近记录: |