我在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
};
当使用枚举值作为语句的case时,语句 * 总是 * 命中default
子句。如果我用枚举值替换它们所表示的整数(即case 0: ... case 1: ...
),则语句按预期运行。
当在语句中使用枚举值时,我尝试将枚举数引用为执行切换的值:
switch ((LED_References_e)led)
但这也是每次都默认的。
我在我的程序中使用了另一个枚举器,这个枚举器功能正常,但是它是使用if/else
而不是switch/case
进行有条件测试的。
我有两个问题:
1.为什么switch/case
语句看起来不适用于枚举值?
1.我忽略了if/else
和switch/case
之间的哪些根本区别?
2条答案
按热度按时间ewm0tg9j1#
假设Max Langhof是正确的,并且在交换机的作用域中还有其他名称
ALL
、LED1
等,因此LED_References_e
的名称被隐藏,这应该会有所帮助:我不能100%确定标准C和Arduino C之间的区别,但是您应该能够做到以下几点:
它告诉编译器你需要
LED_References_e
枚举中的LED1
...LED4
,如果在同一个作用域中还有其他的LEDx
,这应该可以消除歧义。sgtfey8w2#