Книга: Описание языка PascalABC.NET
Оператор безусловного перехода goto
Оператор безусловного перехода goto
Оператор безусловного перехода goto имеет следующую форму:
goto метка
Он переносит выполнение программы к оператору, помеченному меткой метка.
Метка представляет собой идентификатор или целое без знака. Чтобы пометить оператор меткой, необходимо перед оператором указать метку с последующим двоеточием:
label1: оператор
Метки должны быть описаны в разделе меток с использованием служебного слова label:
label 1,2,3;
Например, в результате выполнения программы
label 1,2;
begin
var i := 5;
2: if i<0 thengoto 1;
write(i);
Dec(i);
goto 2;
1:
end.
будет выведено 543210.
Метка должна помечать оператор в том же блоке, в котором описана. Метка не может помечать несколько операторов.
Переход на метку может осуществляться либо на оператор в том же блоке, либо на оператор в объемлющей конструкции. Так, запрещается извне цикла переходить на метку внутри цикла.
Использование оператора безусловного перехода в программе считается признаком плохого стиля программирования. Для основных вариантов использования goto в язык Паскаль введены специальные процедуры: break - переход на оператор, следующий за циклом, exit - переход за последний оператор процедуры, continue - переход за последний оператор в теле цикла.
Один из немногих примеров уместного использования оператора goto в программе - выход из нескольких вложенных циклов одновременно. Например, при поиске элемента k в двумерном массиве:
var a: array [1..10,1..10] of integer;
...
var found := False;
forvar i:=1 to 10 do
forvar j:=1 to 10 do
if a[i,j]=k then
begin
found := True;
goto c1;
end;
c1: writeln(found);
- Операторы: обзор
- Оператор присваивания
- Составной оператор (блок)
- Пустой оператор
- Условный оператор
- Оператор описания переменной
- Оператор выбора
- Оператор цикла for
- Оператор цикла foreach
- Операторы цикла while и repeat
- Оператор with
- Оператор безусловного перехода goto
- Операторы break, continue и exit
- Оператор try ... except
- Оператор try ... finally
- Оператор raise
- Операторы += и -= для процедурных переменных
- Оператор lock