goto — instrukcja (C++)goto Statement (C++)

Goto instrukcji bezwarunkowo przekazuje sterowanie do instrukcji, którego etykietą jest określony identyfikator.The goto statement unconditionally transfers control to the statement labeled by the specified identifier.

SkładniaSyntax

goto identifier;

UwagiRemarks

Instrukcja labeled wyznaczonym przez identifier musi znajdować się w bieżącej funkcji.The labeled statement designated by identifier must be in the current function. Wszystkie identifier nazwy są elementami członkowskimi wewnętrznej przestrzeni nazw i w związku z tym kolidują z innymi identyfikatorami.All identifier names are members of an internal namespace and therefore do not interfere with other identifiers.

Etykieta instrukcji jest istotny tylko goto instrukcji; w przeciwnym razie etykiety instrukcji są ignorowane.A statement label is meaningful only to a goto statement; otherwise, statement labels are ignored. Nie można ponownie zadeklarować etykiety.Labels cannot be redeclared.

A goto instrukcja nie jest dozwolona na kontrola jest przekazywana do lokalizacji, która nakłada się na inicjowanie dowolną zmienną znajdującą się w zakresie w tej lokalizacji.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. Poniższy przykład wywołuje C2362:The following example raises C2362:

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

    int error_code = 42;

exit:
    return error_code;
}

Jest dobrą programowania stylu podziału, nadal, i zwracają instrukcji zamiast przejdź do instrukcji zawsze wtedy, gdy możliwe.It is good programming style to use the break, continue, and return statements instead of the goto statement whenever possible. Jednak ponieważ podziału instrukcji zamyka tylko jeden poziom w pętli, może być konieczne użycie goto instrukcję, aby zakończyć głęboko zagnieżdżonych pętli.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.

Aby uzyskać więcej informacji dotyczących etykiet i goto poufności informacji, zobacz Labeled — instrukcje.For more information about labels and the goto statement, see Labeled Statements.

PrzykładExample

W tym przykładzie goto instrukcji przekazuje sterowanie do punktu z etykietą stop podczas i jest równa 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 );

    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

Zobacz takżeSee also

Instrukcje skokuJump Statements
Słowa kluczoweKeywords