繁体   English   中英

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

[英]Switch statement doesn't work with enum (C++)

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

上面的代码似乎总是命中默认语句,即使该命中MAXIMUM_VALUE_1,也会打印“ default:0”。

我尝试过将变量强制转换为无效

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

编辑:感谢您指出所有人的愚蠢错误:P。 问题的根源是从systemverilog复制编码,该编码使用'case'作为关键字而不是'switch',并且在每个case开头都不需要'case'

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

case MAXIMUM_VALUE_1: ...; break;

添加case关键字,它将起作用。

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

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

开关盒的语法是-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM