Switch语句不适用于枚举(C ++)

时间:2014-07-26 11:19:37

标签: c++ enums switch-statement

enum Maximum_Value{
    MAXIMUM_VALUE_1 = 0,
    MAXIMUM_VALUE_7 = 1,
    MAXIMUM_VALUE_15 = 2,
    MAXIMUM_VALUE_26 = 3,
    MAXIMUM_VALUE_34 = 4
};

int value_from_function = functionetc();

switch(value_from_function){
    MAXIMUM_VALUE_1: printf("MAXIMUM_VALUE_1 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_7: printf("MAXIMUM_VALUE_7 :%x\n",value_from_function); break;
    MAXIMUM_VALUE_15: printf("MAXIMUM_VALUE_15 %x\n",value_from_function); break;
    MAXIMUM_VALUE_26: printf("MAXIMUM_VALUE_26 %x\n",value_from_function); break;
    MAXIMUM_VALUE_34: printf("MAXIMUM_VALUE_34 %x\n",value_from_function); break;  
    default: printf("default :%x\n",value_from_function);
 }

上面的代码似乎总是打到默认语句,打印"默认:0"即使它应该达到MAXIMUM_VALUE_1。

我已经尝试将变量转换为无效

我想我应该将返回值保存到" Maximum_Value"类型的变量中,但为什么代码无法正常工作?

编辑:感谢你指出每个人都非常愚蠢的错误:P。问题的根源是从systemverilog复制编码,使用' case'作为关键字而不是'切换',并且不需要' case'在每个案件的开头

3 个答案:

答案 0 :(得分:5)

枚举器不是标签,但switch语句跳转到标签。您使用case创建标签switch语句可以跳转到:

case MAXIMUM_VALUE_1: ...; break;

答案 1 :(得分:4)

添加案例关键字然后它将起作用。

case MAXIMUM_VALUE_1: printf("MAXIMUM_VALUE_1 :%x\n",value_from_function); break;
case MAXIMUM_VALUE_7: printf("MAXIMUM_VALUE_7 :%x\n",value_from_function); break;
case MAXIMUM_VALUE_15: printf("MAXIMUM_VALUE_15 %x\n",value_from_function); break;
case MAXIMUM_VALUE_26: printf("MAXIMUM_VALUE_26 %x\n",value_from_function); break;
case MAXIMUM_VALUE_34: printf("MAXIMUM_VALUE_34 %x\n",value_from_function); break;  
default: printf("default :%x\n",value_from_function);

答案 2 :(得分:1)

您在每个标签前都缺少case关键字!

switch case的语法是 -

switch(type){
case type1: ....; break;
case type2: ....; break;
......
default: .....;
}