Istruzioni goto e con etichetta (C)goto and Labeled Statements (C)

L'istruzione goto trasferisce il controllo a un'etichetta.The goto statement transfers control to a label. L'etichetta specificata deve risiedere nella stessa funzione e può apparire solo prima di un'istruzione nella stessa funzione.The given label must reside in the same function and can appear before only one statement in the same function.

SintassiSyntax

istruzione:statement:
labeled-statementlabeled-statement

jump-statementjump-statement

jump-statement:jump-statement:
goto identifier ;goto identifier ;

labeled-statement:labeled-statement:
identifier : statementidentifier : statement

Un'etichetta dell'istruzione è significativa solo a un'istruzione goto; in qualsiasi altro contesto, un'istruzione contrassegnata viene eseguita indipendentemente dall'etichetta.A statement label is meaningful only to a goto statement; in any other context, a labeled statement is executed without regard to the label.

Un elemento jump-statement deve risiedere nella stessa funzione e può apparire prima di una sola istruzione nella stessa funzione.A jump-statement must reside in the same function and can appear before only one statement in the same function. Il set di nomi identifier che segue goto dispone del proprio spazio nomi in modo che i nomi non interferiscano con altri identificatori.The set of identifier names following a goto has its own name space so the names do not interfere with other identifiers. Le etichette non possono essere ridichiarate.Labels cannot be redeclared. Per altre informazioni, vedere Spazi dei nomi.See Name Spaces for more information.

Per uno stile di programmazione ottimale è consigliabile preferire le istruzioni break, continue e return all'istruzione goto quando possibile.It is good programming style to use the break, continue, and return statement in preference to goto whenever possible. Dato che l'istruzione break termina solo un livello del ciclo, potrebbe essere necessaria un'istruzione goto per uscire da un ciclo incluso in un ciclo annidato più interno.Since the break statement only exits from one level of the loop, a goto may be necessary for exiting a loop from within a deeply nested loop.

In questo esempio viene illustrata l'istruzione goto:This example demonstrates the goto statement:

// 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 );  
}  

In questo esempio, un'istruzione goto trasferisce il controllo per puntare stop etichettate quando i è uguale a 5.In this example, a goto statement transfers control to the point labeled stop when i equals 5.

Vedere ancheSee Also

IstruzioniStatements