goto i Labeled — instrukcje (C)
Wyrażenie goto przekazuje sterowanie etykiecie.Podana etykieta musi znajdować się w tej samej funkcji i może pojawić się tylko przed jedną instrukcją w tej samej funkcji.
Składnia
statement:
labeled-statementjump-statement
jump-statement:
goto identifier ;labeled-statement:
identifier : statement
Etykieta wyrażenia jest istotna tylko dla wyrażenia goto; w dowolnym innym kontekście wyrażenie z etykietą jest wykonywane bez względu na etykietę.
Instrukcja skoku musi znajdować się w tej samej funkcji i może pojawić się tylko przed jedną instrukcją w tej samej funkcji.Zestaw nazw identyfikatorów następujących po goto ma własną przestrzeń nazw, więc nazwy nie zakłócają innych identyfikatorów.Etykiety nie mogą być ponownie zadeklarowane.Aby uzyskać więcej informacji, zobacz omówienie przestrzeni nazw.
Dobre praktyki zalecają, aby używać instrukcji break, continue i return niż goto zawsze, gdy jest to możliwe.Ponieważ wyrażenie break kończy działanie tylko jednego poziomu pętli, goto może być niezbędne do kończenia pętli z innej głęboko osadzonej pętli.
Ten przykład ilustruje 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 goto przekazuje kontrolę do punktu oznaczonego etykietą stop, gdy i jest równe 5.