C++中的goto语句用于跳转程序的执行点至指定位置。从效率上看,goto很高效,从软件工程角度,goto语句的使用容易导致程序逻辑混乱、变得难以理解和维护。


C语言从更早期的 Fortran语言继承了goto语句,其基本语法格式如下:

标签:
   语句; 
   ...
   语句; 
  
goto 标签;

当goto语句被执行时,程序将直接跳转到对应标签所在的代码行。上述格式中,第1行的标签后面有一个冒号,这是语法要求。此外,标签定义(第1行)既可位于对应的goto语句前,也可位于goto语句后,也就是说,goto语句既可以实现往前跳转,也可以实现往后跳转。

为了解读goto语句的用法,我们构造了下述C++程序:

//Project - GotoExample
#include <iostream>
using namespace std;

int main(){
    int i {1};
    int sum {0};

    loop:
        sum += i;
        i++;
    if (i<=100)
        goto loop;

    cout << "sum = " << sum << endl;
    return 0;
}

上述代码的执行结果为:

sum = 5050

上述程序使用goto语句构造了一个循环,计算1 + 2 + … + 100的和。读者可以把上述代码的第10 ~ 11行视作循环体。

🚩第9行:定义了标签loop。

🚩第12 ~ 13行: 当i<=100时,使用goto语句跳转至loop标签,即第9行。

图4-12中的箭头展示了上述程序中第13行goto语句执行时,程序的跳转方向。

python类似goto语法 python中的goto语句_开发语言


goto语句的执行效率很高,但对初学者非常不友好,容易导致程序逻辑混乱、资源泄露等方面的问题。事实上,通过组合使用if else、for/while循环、break、continue等可以避免goto语句的使用。我们给初学者的建议是:不要使用goto语句。

对于那些有丰富经验的程序员而言,goto语句的恰当使用,除了获得较高的执行效率之外,有时还可以简化程序的结构。在Linux操作系统的内核代码中,我们可以看到大量的goto语句。当前最流行的手机操作系统之一的Android,基于Linux内核。