为什么第二个表达式在这个“switch”语句中也计算为真?

问题描述 投票:0回答:2

我希望有人能帮我解决一个初学者问题(这是专门在 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时计算为真)。

我在这里错过了什么?

谢谢!

c++ arduino switch-statement expression
2个回答
3
投票

你似乎期望它像

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:

1
投票

此代码:

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.