goto
и помеченные операторы (C)
Оператор goto
передает управление метке. Данная метка должна находиться в той же функции и может присутствовать только перед одним ее оператором.
Синтаксис
statement
:
labeled-statement
jump-statement
jump-statement
:
goto
identifier
;
labeled-statement
:
identifier
:
statement
Метка оператора значима только для оператора goto
; в любом другом контексте оператор с меткой выполняется независимо от нее.
Должен jump-statement
находиться в той же функции и может отображаться только один оператор в той же функции. identifier
Набор имен после goto
имени имеет собственное пространство имен, чтобы имена не влияли на другие идентификаторы. Метки не могут быть переопределены. Дополнительные сведения см. в разделе "Пространства имен".
Это хороший стиль программирования для использования break
и continue
return
инструкции goto
по возможности. Поскольку оператор 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.