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

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

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

我试过将 switch 中的变量强制转换为无效

我想我应该将返回值保存到“Maximum_Value”类型的变量中,但为什么代码仍然不起作用?

编辑:感谢大家指出这个非常愚蠢的错误 :P。问题的根源是从 systemverilog 复制代码,它使用 'case' 作为关键字而不是 'switch',并且不需要在每个 case 的开头使用 'case'

最佳答案

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

case MAXIMUM_VALUE_1: ...; break;

关于c++ - Switch 语句不适用于枚举 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970476/

相关文章:

c++ - 如何在循环中更改 int 变量,如果可以,是否有更有效的方法?

c++ - 我们如何从 C++ 中的子类调用父重载构造函数?

objective-c - typedef NS_ENUM 与 typedef 枚举

swift - 是否可以在枚举关联值条件和另一个枚举案例之间编写复合切换案例?

java - 安卓枚举 : set enum programatically from integer value

c++ - C++中的评分系统

Javascript 数组索引无法正常工作

android - 在 Android 平台上使用 dlclose(...) 时出现段错误

c++ - IDXGISwapChain::ResizeBuffers() 0x887a0001 DXGI_ERROR_INVALID_CALL

c++ - C++14 中语句 (void)f() 的状态,它的格式是否错误?如果不是,f() 部分是丢弃值吗?