Справочник по Ada 2005
5.8 Операторы Goto
Оператор goto_statement задаёт явное передачу управления от этого оператора statement к целевому оператору с заданным меткой.
Синтаксис
Правила разрешения имён
Имя label_name должно соответствовать метке; оператор statement с этой меткой является целевым оператором.
Правила корректности
Вложенная последовательность операторов sequence_of_statements, содержащая целевой оператор, должна также содержать оператор goto_statement. Кроме того, если оператор goto_statement находится внутри оператора accept_statement или тела, то целевой оператор не должен находиться за пределами этого вложенного блока.
Динамическая семантика
Выполнение оператора goto_statement передаёт управление целевому оператору, завершая выполнение любого составного оператора compound_statement, который содержит оператор goto_statement, но не содержит целевой оператор.
ПРИМЕЧАНИЯ
9 Приведённые выше правила позволяют передавать управление оператору вложенной последовательности операторов sequence_of_statements, но не наоборот. Аналогично, они запрещают передачи управления, такие как между альтернативами оператора case_statement, if_statement или select_statement; между обработчиками исключений; или из обработчика исключения вложенной последовательности операторов handled_sequence_of_statements обратно в его последовательность операторов sequence_of_statements.
Примеры
Пример цикла, содержащего оператор goto:
<<Sort>>
for I in 1 .. N-1 loop
if A(I) > A(I+1) then
Exchange(A(I), A(I+1));
goto Sort;
end if;
end loop;
for I in 1 .. N-1 loop
if A(I) > A(I+1) then
Exchange(A(I), A(I+1));
goto Sort;
end if;
end loop;