goto ステートメント (C++)goto Statement (C++)

ステートメントは、 goto 指定された識別子によってラベル付けされたステートメントに、無条件で制御を転送します。The goto statement unconditionally transfers control to the statement labeled by the specified identifier.


goto identifier;


identifier で指定されたラベル付きステートメントは、現在の関数内にある必要があります。The labeled statement designated by identifier must be in the current function. すべての identifier 名は内部の名前空間のメンバーであるため、他の識別子と干渉することはありません。All identifier names are members of an internal namespace and therefore do not interfere with other identifiers.

ステートメントラベルは、ステートメントに対してのみ意味があります。 goto それ以外の場合、ステートメントラベルは無視されます。A statement label is meaningful only to a goto statement; otherwise, statement labels are ignored. ラベルは再宣言できません。Labels cannot be redeclared.

goto ステートメントでは、その場所のスコープ内にある変数の初期化をスキップする場所への制御の転送は許可されていません。A goto statement is not allowed to transfer control to a location that skips over the initialization of any variable that is in scope in that location. 次の例では、C2362 が発生します。The following example raises C2362:

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

    int error_code = 42;

    return error_code;

可能な限り breakcontinue return ステートメントの代わりに、、およびの各ステートメントを使用するのに適したプログラミングスタイルです gotoIt is good programming style to use the break, continue, and return statements instead of the goto statement whenever possible. ただし、ステートメントは break ループの1つのレベルのみから終了するので、ステートメントを使用して goto 深い入れ子になったループを終了する必要がある場合があります。However, because the break statement exits from only one level of a loop, you might have to use a goto statement to exit a deeply nested loop.

ラベルとステートメントの詳細については goto 、「ラベル付きステートメント」を参照してください。For more information about labels and the goto statement, see Labeled Statements.


この例では、 goto ステートメントによって、が3に等しい場合にラベルが付けられたポイントに制御が移り stop i ます。In this example, a goto statement transfers control to the point labeled stop when i equals 3.

// 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 );

    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

関連項目See also

ジャンプ ステートメントJump Statements