goto
i instrukcje oznaczone etykietami (C)
Instrukcja goto
przenosi kontrolkę do etykiety. Dana etykieta musi znajdować się w tej samej funkcji i może być wyświetlana przed tylko jedną instrukcją w tej samej funkcji.
Składnia
statement
:
labeled-statement
jump-statement
jump-statement
:
goto
identifier
;
labeled-statement
:
identifier
:
statement
Etykieta instrukcji jest zrozumiała tylko dla goto
instrukcji. W każdym innym kontekście instrukcja oznaczona etykietą jest wykonywana bez względu na etykietę.
Element jump-statement
musi znajdować się w tej samej funkcji i może występować przed tylko jedną instrukcją w tej samej funkcji. Zestaw identifier
nazw po obiekcie ma własną goto
przestrzeń nazw, więc nazwy nie zakłócają innych identyfikatorów. Nie można ponownie deklarować etykiet. Aby uzyskać więcej informacji, zobacz Przestrzenie nazw.
Dobrym stylem programowania jest użycie break
instrukcji , continue
i return
w preferencjach, jeśli goto
jest to możliwe. break
Ponieważ instrukcja kończy się tylko z jednego poziomu pętli, goto
może być konieczne wyjście pętli z głęboko zagnieżdżonej pętli.
W tym przykładzie pokazano instrukcję 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 );
}
W tym przykładzie instrukcja przenosi kontrolkę goto
do punktu oznaczonego stop
etykietą , gdy i
równa się 5.