goto 语句 (C++)

goto 语句无条件地将控制转移到由指定标识符标记的语句。

语法

goto identifier;

备注

identifier 指定的标记语句必须位于当前函数中。 所有 identifier 名称都是内部命名空间的成员,因此不会干扰其他标识符。

语句标签仅对 goto 语句有意义;否则,将忽略语句标签。 不能重新声明标签。

不允许 goto 语句将控制转移到跳过该位置范围内任何变量的初始化的位置。 以下示例引发 C2362:

int goto_fn(bool b)
{
    if (!b)
    {
        goto exit;  // C2362
    }
    else
    { /*...*/ }

    int error_code = 42;

exit:
    return error_code;
}

有一种较好的编程风格,是尽可能使用 breakcontinuereturn 语句而不是 goto 语句。 但是,由于 break 语句仅退出循环的一个级别,可能必须使用 goto 语句来退出深度嵌套的循环。

有关标签和 goto 语句的详细信息,请参阅带标签的语句

示例

在此示例中,当 i 等于 3 时,goto 语句将控制转移到标记为 stop 的点。

// goto_statement.cpp
#include <stdio.h>
int main()
{
    int i, j;

    for ( i = 0; i < 10; i++ )
    {
        printf_s( "Outer loop executing. i = %d\n", i );
        for ( j = 0; j < 2; j++ )
        {
            printf_s( " Inner loop executing. j = %d\n", j );
            if ( i == 3 )
                goto stop;
        }
    }

    // This message does not print:
    printf_s( "Loop exited. i = %d\n", i );

    stop:
    printf_s( "Jumped to stop. i = %d\n", i );
}
Outer loop executing. i = 0
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 1
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 2
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 3
Inner loop executing. j = 0
Jumped to stop. i = 3

另请参阅

跳转语句
关键字