我希望有人能帮我解决一个初学者问题(这是专门在 Arduino 上运行的,但我怀疑这是一个比这更基础的 C++ 问题)。
我不明白为什么下面的“switch”语句输出both“Channel 1”和“Channel 2”语句:
void setup() {
delay(100);
Serial.begin(57600);
delay(100);
int channel = 1;
switch (channel) {
case 1:
Serial.println("Channel 1");
case 2:
Serial.println("Channel 2");
}
}
void loop() {
}
我读过 switch 语句“follow-though”或“cascade”,也就是说,我知道如果条件 1 得到满足,那么代码仍然会继续检查后续条件(并且您可以添加一个显式的“break”命令跳出)。这一切都很好。
但是我不明白第二个表达式的计算结果为真(因为整型变量channel=1,它应该只在channel=2时计算为真)。
我在这里错过了什么?
谢谢!
你似乎期望它像
if (channel == 1)
Serial.println("Channel 1");
if (channel == 2)
Serial.println("Channel 2");
但实际上就像
if (channel == 1)
goto case1;
if (channel == 2)
goto case2;
goto none;
case1:
Serial.println("Channel 1");
case2:
Serial.println("Channel 2")
none:
此代码:
switch (channel) {
case 1:
Serial.println("Channel 1");
case 2:
Serial.println("Channel 2");
case 3:
Serial.println("Channel 3");
}
相当于这段代码(现实世界中永远不应该写的代码):
if (channel == 1)
{
Serial.println("Channel 1");
goto next_1;
}
if (channel == 2)
{
next_1:
Serial.println("Channel 2");
goto next_2;
}
if (channel == 3)
{
next_2:
Serial.println("Channel 3");
}