我在Arduino 1.8.7中有以下switch/case
语句,其中变量led
是整数:
switch (led) {
case ALL: {
/* do stuff */
break;
}
case LED1: {
/* do stuff */
break;
}
case LED2: {
/* do stuff */
break;
}
case LED3: {
/* do stuff */
break;
}
case LED4: {
/* do stuff */
break;
}
default: {
break;
}
}
我还有以下enum
:
enum LED_References_e
{
ALL = 0,
LED1 = 1,
LED2 = 2,
LED3 = 3,
LED4 = 4
};
在将枚举值用作语句的大小写时,语句始终会命中default
子句。如果我用枚举值代替它们表示的整数(即case 0: ... case 1: ...
),则该语句将按预期运行。
当在语句中使用枚举值时,我尝试将枚举器引用为在其上执行切换的值:
switch ((LED_References_e)led)
但这也是每次默认设置。
我正在程序中使用另一个枚举器,并且该枚举器可以正常运行,但是使用if/else
而不是switch/case
对其进行了条件测试。
我的问题是双重的:
switch/case
语句似乎不适用于枚举值?if/else
和switch/case
之间我缺少什么根本区别?答案 0 :(得分:2)
假设Max Langhof是正确的,并且在开关的作用域中还有其他名称ALL
,LED1
等,这样LED_References_e
的阴影就可以了,这应该有帮助:
我不确定100%标准C ++和Arduino C ++之间的区别,但是您应该能够执行以下操作:
enum LED_References_e
{
ALL = 0,
LED1 = 1,
LED2 = 2,
LED3 = 3,
LED4 = 4
};
switch (led) {
case LED_References_e::ALL: {
/* do stuff */
break;
}
case LED_References_e::LED1: {
/* do stuff */
break;
}
case LED_References_e::LED2: {
/* do stuff */
break;
}
case LED_References_e::LED3: {
/* do stuff */
break;
}
case LED_References_e::LED4: {
/* do stuff */
break;
}
default: {
break;
}
}
它的作用是告诉编译器,您明确希望从LED1
枚举中LED4
... LED_References_e
。
如果同一范围内还有其他LEDx
个对象,则应消除歧义。