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.