次の方法で共有


goto ステートメントとラベル付きステートメント (C)

goto ステートメントは、特定のラベルに制御を移します。 この特定のラベルは、同じ関数内に存在する必要があり、同じ関数内の 1 つのステートメントの前にのみ指定できます。

構文

statement:
labeled-statement
jump-statement

jump-statement:
goto identifier ;

labeled-statement:
identifier : statement

ステートメント ラベルは goto ステートメントに対してのみ意味を持ちます。他のコンテキストでは、ラベル付きステートメントはラベルに関係なく実行されます。

jump-statement は同じ関数に存在する必要があり、同じ関数の特定のステートメントの前にのみ指定できます。 goto に続く identifier の名前のセットには独自の名前空間があるため、名前が他の識別子に干渉することはありません。 ラベルは再宣言できません。 詳しくは、「名前空間」を参照してください。

可能な限り、goto ではなく breakcontinuereturn ステートメントを使うことをお勧めします。 break ステートメントは、ループの 1 つのレベルから抜けるだけであるため、 goto は、深い入れ子になっているループ内からループを終了する場合に必要になることがあります。

goto ステートメントの例を次に示します。

// goto.c
#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 < 3; j++ )
        {
            printf_s( " Inner loop executing. j = %d\n", j );
            if ( i == 5 )
                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 );
}

この例で goto ステートメントは、i が 5 に等しい場合に、stop というラベルの位置に制御を移します。

関連項目

ステートメント