goto-Anweisung (C++)goto Statement (C++)

Die Goto -Anweisung überträgt die Steuerung bedingungslos an die Anweisung anhand des angegebenen Bezeichners.The goto statement unconditionally transfers control to the statement labeled by the specified identifier.

SyntaxSyntax

goto identifier;

HinweiseRemarks

Die bezeichnete Anweisung, die durch identifier angegeben wird, muss sich in der aktuellen Funktion befinden.The labeled statement designated by identifier must be in the current function. Alle identifier-Namen sind Member eines internen Namespace und beeinträchtigen daher andere Bezeichner nicht.All identifier names are members of an internal namespace and therefore do not interfere with other identifiers.

Eine anweisungsbezeichnung ist nur sinnvoll ein "GoTo" -Anweisung; andernfalls werden anweisungsbezeichnungen ignoriert.A statement label is meaningful only to a goto statement; otherwise, statement labels are ignored. Bezeichnungen können nicht erneut deklariert werden.Labels cannot be redeclared.

Ein Goto Anweisung ist nicht zulässig, um das Steuerelement an einen Speicherort übertragen, die über die Initialisierung von allen Variablen überspringt, die im Bereich an diesem Speicherort befindet.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. Im folgende Beispiel löst C2362 aus:The following example raises C2362:

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

    int error_code = 42;

exit:
    return error_code;
}

Programmierung empfiehlt es sich beim der Break, weiterhin, und zurückgeben -Anweisungen anstelle von der Goto Anweisung immer möglich ist.It is good programming style to use the break, continue, and return statements instead of the goto statement whenever possible. Allerdings da die Break Anweisung, die nur eine Ebene einer Schleife beendet wird, müssen Sie möglicherweise mit einer "GoTo" Anweisung, um eine tief geschachtelte Schleife zu beenden.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.

Weitere Informationen über Bezeichnungen und der Goto -Anweisung finden Sie unter Anweisungen mit Bezeichnung.For more information about labels and the goto statement, see Labeled Statements.

BeispielExample

In diesem Beispiel eine Goto -Anweisung überträgt die Steuerung an den Punkt mit der Bezeichnung stop beim i gleich 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

Siehe auchSee also

SprunganweisungenJump Statements
SchlüsselwörterKeywords