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.

A 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;

使用するスタイルのプログラミングをお勧め、 break続行返すステートメントの代わりに、 gotoステートメントたびに考えられる。It 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ステートメントに制御というラベルの位置を転送stopときiが 3 に等しい。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