Arduino 中的 Goto

arduinosoftware & codinghardware更新于 2026/1/11 16:22:17

goto 是 Arduino 中的一种控制结构,类似于 C 语言,用于将程序流程转移到程序中的另一个位置。强烈建议不要使用 goto,因为许多程序员认为,即使不使用 goto,也可以编写任何所需的算法。

过度使用 goto 会使程序调试变得非常困难,或者在某些情况下,会创建无法调试的程序流程。我们假设您只有在绝对需要使用 goto 时才会继续阅读。

语法

使用 goto 的语法是 −

goto 标签;

标签:
  //语句

示例

以下示例演示了此 −

void setup() {
   // 在此处输入设置代码,运行一次:
   Serial.begin(9600);
   Serial.println();
   int x = random(5);

   Serial.print(&"x 的值为 ");Serial.println(x);

   if (x % 2 == 0) {
      goto even_print;
   } else {
      goto odd_print;
   }

   Serial.println("设置结束");

   even_print:
      Serial.println("x 为偶数");
   odd_print:
      Serial.println("x 为奇数");
}

void loop() {
   // 在此处放置主代码,以便重复运行:
   Serial.println("循环...");
   delay(1000);
}

输出

串行监视器输出如下所示。请注意,我多次重置 Arduino 以获得不同的 x 值。

请注意,当 x 为偶数时,"x 为奇数"也会被打印,因为 odd_print 标签跟在 even_print 标签后面。因此,下一个打印语句跟在第一个打印语句后面。这表明 even_print 和 odd_print 只是标记;它们不会停止程序执行。

goto 语句只是使用标签改变程序流程,但执行完一个标签中的语句后,程序会线性执行并执行下一行(在本例中为 odd_print 语句)。

另请注意,"End of setup" 永远不会被打印。这是因为两个 goto 语句都会使程序流程跳过该行。这表明,一旦执行完标签中的语句,程序就不会回到原来的行。它会线性向前移动,除非遇到另一个 goto 语句。这个例子可以让你了解为什么不鼓励使用 goto。


相关文章