Istruzione goto (C++)

L'istruzione goto trasferisce in modo incondizionato il controllo all'istruzione etichettata dall'identificatore specificato.

Sintassi

goto identifier;

Osservazioni:

L'istruzione con etichetta designata da identifier deve essere nella funzione corrente. Tutti i nomi di identifier sono membri di uno spazio dei nomi interno e quindi non interferiscono con altri identificatori.

Un'etichetta di istruzione è significativa solo per un'istruzione goto . In caso contrario, le etichette delle istruzioni vengono ignorate. Le etichette non possono essere ridichiarate.

Un'istruzione goto non può trasferire il controllo in una posizione che ignora l'inizializzazione di qualsiasi variabile nell'ambito in tale posizione. L'esempio seguente genera l'errore C2362:

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

    int error_code = 42;

exit:
    return error_code;
}

È un buon stile di programmazione usare le breakistruzioni , continuee return anziché l'istruzione goto quando possibile. Tuttavia, poiché l'istruzione break esce da un solo livello di un ciclo, potrebbe essere necessario usare un'istruzione goto per uscire da un ciclo annidato in modo approfondito.

Per altre informazioni sulle etichette e sull'istruzione goto , vedere Istruzioni etichettate.

Esempio

In questo esempio un'istruzione trasferisce il goto controllo al punto etichettato stop quando i è uguale a 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

Vedi anche

Istruzioni di spostamento
Parole chiave