Compartilhar via


goto e instruções e rotuladas (C)

A instrução goto transfere o controle para um rótulo. O rótulo fornecido deve residir na mesma função e pode aparecer antes de apenas uma instrução na mesma função.

Sintaxe

statement:
labeled-statement
jump-statement

jump-statement:
goto identifier ;

labeled-statement:
identifier : statement

O rótulo de uma instrução é significante somente para uma instrução goto; em qualquer outro contexto, uma instrução rotulada é executada sem considerar o rótulo.

Um elemento jump-statement deve residir na mesma função e pode aparecer antes de apenas uma instrução na mesma função. O conjunto de nomes identifier após um goto tem o próprio namespace para que os nomes não interfiram com outros identificadores. Os rótulos não podem ser redeclarados. Para obter mais informações, confira Namespaces.

Um bom estilo de programação é usar a instrução break, continue e return em vez de goto sempre que possível. Como a instrução break sai apenas de um nível do loop, uma goto pode ser necessária para sair de um loop dentro de um loop profundamente aninhado.

Este exemplo demonstra a instrução 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 );
}

Neste exemplo, uma instrução goto transfere o controle para o ponto rotulado stop quando o valor de i é igual a 5.

Confira também

Instruções