Оператор goto (C++)
Оператор goto
безусловно передает управление инструкции, помеченной указанным идентификатором.
Синтаксис
goto identifier;
Замечания
Оператор, метка которого задана в параметре identifier
, должен находиться в текущей функции. Все имена, заданные в параметре identifier
, являются членами внутреннего пространства имен и, следовательно, не пересекаются с другими идентификаторами.
Метка оператора имеет смысл только для goto
оператора. В противном случае метки операторов игнорируются. Повторное объявление меток невозможно.
Оператор goto
не может передавать управление в расположение, пропускающее инициализацию любой переменной, которая находится в область в этом расположении. В следующем примере возникает ошибка C2362:
int goto_fn(bool b)
{
if (!b)
{
goto exit; // C2362
}
else
{ /*...*/ }
int error_code = 42;
exit:
return error_code;
}
Это хороший стиль программирования для использования break
continue
операторов , а return
не инструкцийgoto
, когда это возможно. Тем не менее, поскольку break
оператор выходит из только одного уровня цикла, может потребоваться использовать goto
оператор для выхода из глубоко вложенного цикла.
Дополнительные сведения о метках и goto
инструкции см. в разделе "Операторы с метками".
Пример
В этом примере goto
оператор передает элемент управления в точку, помеченную stop
i
при значении 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
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по