2

What does C standard talk about mixing enumerations in the case constants of a switch-case statement? I ensure that there are no duplicate values of the mixed enum types.

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;
}

I get the code compiled clean with the -ansi -Wall flags, but Klockwork reports some problem in this code.

4

1 回答 1

3

它在 C 中是允许的。你得到的是 Klocwork 的警告,因为它认为混合不同enum的类型不是一个好主意。(我个人同意这一点):

引用Klocwork的话:

不一致的案例标签

INCONSISTENT.LABEL 检查器查找多个枚举类型用作 switch 表达式或用作 switch 语句中的标签的情况。

脆弱性和风险

在 switch 语句中使用具有不同枚举类型的标签可能会导致问题,因为具有相同值的枚举成员可能具有不同的含义。设计意图失败,可能会出现意想不到的结果。

于 2013-09-12T12:26:19.183 回答