如果带有枚举类型参数的开关错过了一些常量并且没有默认分支,则 gcc-Wswitch
选项会导致类似的警告
warning: enumeration value 'WHATEVER' not handled in switch
但是,我们的许多开关是这样的:
enum foo {
FOO_ONE,
FOO_TWO,
FOO_COUNT
};
其中 FOO_COUNT 永远不会作为值出现,而是用于了解已定义并可能出现在变量中的值的数量。因为我们正在使用枚举值索引一个数组或对其进行位打包,并且需要检查它是否适合或其他东西。因此,处理所有值的枚举不应包含这个常量。有没有办法保留该警告,但避免使用这种特殊值?IE
switch(foo) {
case FOO_ONE:
anything;
};
应该发出警告,但是:
switch(foo) {
case FOO_ONE:
anything;
case FOO_TWO:
anything_else;
}
不应该。