C++中的goto语句用于跳转程序的执行点至指定位置。从效率上看,goto很高效,从软件工程角度,goto语句的使用容易导致程序逻辑混乱、变得难以理解和维护。
版权声明
本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。
本文不可以以纸质出版为目的进行改编、摘抄。
C语言从更早期的 Fortran语言继承了goto语句,其基本语法格式如下:
1 | 标签: |
当goto语句被执行时,程序将直接跳转到对应标签所在的代码行。上述格式中,第1行的标签后面有一个冒号,这是语法要求。此外,标签定义(第1行)既可位于对应的goto语句前,也可位于goto语句后,也就是说,goto语句既可以实现往前跳转,也可以实现往后跳转。
为了解读goto语句的用法,我们构造了下述C++程序:
1 | //Project - GotoExample |
上述代码的执行结果为:
1 | sum = 5050 |
上述程序使用goto语句构造了一个循环,计算1 + 2 + … + 100的和。读者可以把上述代码的第10 ~ 11行视作循环体。
🚩第9行:定义了标签loop。
🚩第12 ~ 13行: 当i<=100时,使用goto语句跳转至loop标签,即第9行。
图4-12中的箭头展示了上述程序中第13行goto语句执行时,程序的跳转方向。
goto语句的执行效率很高,但对初学者非常不友好,容易导致程序逻辑混乱、资源泄露等方面的问题。事实上,通过组合使用if else、for/while循环、break、continue等可以避免goto语句的使用。我们给初学者的建议是:不要使用goto语句。
对于那些有丰富经验的程序员而言,goto语句的恰当使用,除了获得较高的执行效率之外,有时还可以简化程序的结构。在Linux操作系统的内核代码中,我们可以看到大量的goto语句。当前最流行的手机操作系统之一的Android,基于Linux内核。