Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Instrukcja goto
bezwarunkowo przenosi kontrolę do instrukcji oznaczonej przez określony identyfikator.
Składnia
goto identifier;
Uwagi
Instrukcja oznaczona identifier
etykietą musi znajdować się w bieżącej funkcji. Wszystkie identifier
nazwy są elementami członkowskimi wewnętrznej przestrzeni nazw i dlatego nie zakłócają innych identyfikatorów.
Etykieta instrukcji ma znaczenie tylko dla goto
instrukcji; w przeciwnym razie etykiety instrukcji są ignorowane. Nie można ponownie deklarować etykiet.
Instrukcja goto
nie może przenosić kontrolki do lokalizacji, która pomija inicjowanie dowolnej zmiennej, która znajduje się w zakresie w tej lokalizacji. Poniższy przykład zgłasza błąd C2362:
int goto_fn(bool b)
{
if (!b)
{
goto exit; // C2362
}
else
{ /*...*/ }
int error_code = 42;
exit:
return error_code;
}
Dobrym stylem programowania jest użycie instrukcji break
, continue
i return
zamiast instrukcji goto
, gdy jest to możliwe. Jednak ponieważ break
instrukcja kończy działanie tylko z jednego poziomu pętli, może być konieczne użycie goto
instrukcji w celu zakończenia głęboko zagnieżdżonej pętli.
Aby uzyskać więcej informacji na temat etykiet i instrukcji goto
, zobacz Instrukcje z etykietami.
Przykład
W tym przykładzie instrukcja przenosi kontrolkę goto
do punktu oznaczonego stop
etykietą , gdy i
równa się 3.
// goto_statement.cpp
#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 < 2; j++ )
{
printf_s( " Inner loop executing. j = %d\n", j );
if ( i == 3 )
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 );
}
Outer loop executing. i = 0
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 1
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 2
Inner loop executing. j = 0
Inner loop executing. j = 1
Outer loop executing. i = 3
Inner loop executing. j = 0
Jumped to stop. i = 3