C标准谈到在switch
- case
语句的大小写常量中混合枚举的内容是什么?我确保混合enum
类型没有重复值。
switch (value) /* value is int type */
{
case enum1_val: /* enum1_val is of enum type enum1 */
break;
case enum2_val: /* enum2_val is of enum type enum2 */
break;
}
我使用-ansi -Wall
标志编译干净的代码,但Klockwork报告了此代码中的一些问题。
答案 0 :(得分:3)
允许使用C.你得到的是Klocwork的警告,因为它认为混合不同的enum
类型并不是一个好主意。 (我个人同意这一点):
引自Klocwork:
案例标签不一致
INCONSISTENT.LABEL检查程序查找多个枚举类型用作switch表达式或switch语句中的标签的情况。
漏洞和风险
在switch语句中使用具有不同枚举类型的标签会导致问题,因为具有相同值的枚举成员可能具有不同的含义。设计意图失败,可能会出现意外结果。