Instructions goto
et étiquetées (C)
L'instruction goto
transfère le contrôle à une étiquette. L'étiquette donnée doit résider dans la même fonction et peut apparaître devant une seule instruction dans la même fonction.
Syntaxe
statement
:
labeled-statement
jump-statement
jump-statement
:
goto
identifier
;
labeled-statement
:
identifier
:
statement
Une étiquette d'instruction est uniquement explicite pour une instruction goto
. Dans tout autre contexte, une instruction étiquetée est exécutée sans tenir compte de l'étiquette.
Une instruction jump-statement
doit résider dans la même fonction et peut apparaître devant une seule instruction dans la même fonction. L’ensemble des noms identifier
suivant une instruction goto
a son propre espace de noms, de sorte que les noms n’interfèrent pas avec d’autres identificateurs. Les étiquettes ne peuvent pas être redéclarées. Pour plus d’informations, consultez Espaces de noms.
Il est toutefois conseillé d’utiliser l’instruction break
, continue
et return
plutôt que goto
dans la mesure du possible. Étant donné que l’instruction break
n’exécute une sortie que d’un niveau de la boucle, une instruction goto
peut être nécessaire pour quitter une boucle dans une boucle profondément imbriquée.
Cet exemple illustre l'instruction 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 );
}
Dans cet exemple, une instruction goto
transfère le contrôle au point étiqueté stop
lorsque i
est égal à 5.