goto и помеченные операторы (C)
Оператор goto передает управление метке. Данная метка должна находиться в той же функции и может присутствовать только перед одним ее оператором.
Синтаксис
оператор:
оператор-с-меткойоператор-перехода
оператор-перехода:
goto идентификатор ;оператор-с-меткой:
идентификатор : оператор
Метка оператора значима только для оператора goto; в любом другом контексте оператор с меткой выполняется независимо от нее.
Оператор-перехода должен находиться в той же функции и может присутствовать только перед одним ее оператором. Набор имен идентификаторов после оператора goto имеет свое собственное пространство имен, поэтому эти имена не конфликтуют с другими идентификаторами. Повторное объявление меток невозможно. Дополнительные сведения см. в разделе Пространства имен.
Рекомендуется всегда, когда это возможно, вместо оператора goto использовать операторы break, continue и return. Поскольку оператор break обеспечивает выход только из одного уровня цикла, для выхода из глубоко вложенного цикла может потребоваться оператор goto.
В следующем примере показано использование оператора 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 );
}
В этом примере оператор goto передает управление в точку с меткой stop, когда значение переменной i равно 5.