Оператор безусловной передачи управления
Оператор безусловной передачи управления – предписатель для безусловного нарушения естественного хода выполнения программы в соответствии с требованием алгоритма.
Он реализует в программе указанные в алгоритме линии (стрелки) беспроверочных переходов. Например, переходы от блоков 6 к блокам 8 на условно-линейных схемах задачи об удельных нагрузках (рис. 4.4).
Структура оператора:
goto m;
, где goto – ключевое слово (идти к);
m – метка оператора, которому передаётся управление;
; – признак простого оператора.
Метка– буквенно-цифровое обозначение, позволяющее выделить (пометить) требуемый оператор в ряду других.
Правила составления и использования
Под меткой понимается идентификатор аналогичный имени переменной.
Идентификатор метки составляется пользователем произвольно, в ряду других меток программы.
Указанная в операторе goto метка записывается перед помечаемым оператором, отделяясь от него двоеточием.
Оператор, помеченный меткой m, может располагаться в соответствии с требованием алгоритма решения выше или ниже самого оператора goto, как указано в следующих фрагментах программы:
. . . goto f3; . . . f3:v=0.36; | . . . met2:scanf(. . .); . . . goto met2; | . . . goto t; t:x1=x; . . . |
В первом фрагменте управление передаётся от оператора goto f3 вниз – оператору v = 0.36;, перед которым проставлена его метка. При этом расположенная между ними часть программы (последовательность операторов) выполнена не будет. Во втором - управление передаётся вверх на повторный ввод переменных. В третьем - управление передаётся следующему за goto оператору, что возможно, но бессмысленно, т. к. в этом случае естественный порядок следования операторов не нарушается.
Оператор, записанный под goto, должен быть помечен меткой другого оператора управления, иначе участок программы, записанный ниже goto, никогда не будет выполняться:
. . .
От другого goto A;
оператора B:x1=23.;
управления . . .
A:x2=x - 15.;
. . .
Метка m может проставляться только перед простым оператором. При необходимости передать управление на начало (конец) составного оператора (фигурную скобку) используется специальный пустой оператор (;). Он записывается над скобкой и помечается нужной меткой. Например:
goto M1; . . . M1:; {. . . | goto M2; . . . M2:; }. . . |
ü Внимание! Использование оператора безусловной передачи управления допускается, но не поощряется правилами структурного программирования, т.к. позволяет создавать нестандартные структуры с немотивированными передачами управления.