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_print和odd_print只是标记;它们不会停止程序执行。
goto语句只是使用标签更改程序流程,但在执行完一个标签中的语句后,程序会线性地继续执行下一行(在本例中为odd_print语句)。
此外,请注意“设置结束”从未被打印。这是因为两个goto语句都使程序流程跳过了该行。这说明一旦执行完标签内的语句,程序就不会返回到原来的行。它会线性地向前移动,除非当然它遇到另一个goto语句。这个例子应该让你明白为什么不鼓励使用goto。
广告