Arduino中的goto语句


goto是Arduino中的一种控制结构,类似于C语言,用于将程序流程转移到程序中的另一个点。 强烈建议避免使用它,因为许多程序员都认为无需goto就能编写任何你想要的算法。

过度使用goto会使程序调试非常困难,甚至在某些情况下会创建无法调试的程序流程。 除非你绝对必须使用goto,否则建议继续阅读。

语法

使用goto的语法如下:

goto label;

label:
   //statements

示例

以下示例演示了这一点:

void setup() {
   // put your setup code here, to run once:
   Serial.begin(9600);
   Serial.println();
   int x = random(5);

   Serial.print("Value of x is ");Serial.println(x);

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

   Serial.println("End of setup");

   even_print:
      Serial.println("x is even");
   odd_print:
      Serial.println("x is odd");
}

void loop() {
   // put your main code here, to run repeatedly:
   Serial.println("Looping...");
   delay(1000);
}

输出

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

可以看到,当x为偶数时,“x是奇数”也会被打印,因为odd_print标签位于even_print标签之后。因此,下一个打印语句紧跟在第一个打印语句之后。这表明even_printodd_print只是标记;它们不会停止程序执行。

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

此外,请注意“设置结束”从未被打印。这是因为两个goto语句都使程序流程跳过了该行。这说明一旦执行完标签内的语句,程序就不会返回到原来的行。它会线性地向前移动,除非当然它遇到另一个goto语句。这个例子应该让你明白为什么不鼓励使用goto

更新于:2021年8月2日

6K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告