Cтраница 4
Этот выход ( возврат) осуществляется всегда в активизирующий модуль. Единственным исключением из этого правила может быть обнаружение неисправимых ошибок и немедленное завершение программы. Например, если неисправимая ошибка была обнаружена в подчиненном сегменте или модуле, то более эффективным или удобным может быть не передача индикатора наверх по иерархии, а немедленное завершение программы. В этом случае в сегменте может использоваться конструкция ОСТАНОВИТЬ РАБОТУ ( STOP RUN) или запуск программы аварийного завершения. [46]
Самое важное, чтобы управление возвращалось к вызвавшему сегменту. Исключением из этого правила может быть только случай, когда обнаружена неисправимая ошибка или работу нужно немедленно прекратить. Если, например, неисправимая ошибка обнаружена в сегменте низкого уровня, то может оказаться неразумным передавать соответствующий индикатор вверх по всей иерархии сегментов и лучше немедленно остановить исполнение в том же сегменте низкого уровня. [47]
Пользователь ВМ завершает сеанс работы с помощью команды МВМ LOGOFF. Оператор СВМ ЕС может вызвать принудительное завершение работы любой ВМ с помощью команды МВМ FORCE или всех пользователей с помощью команды SHUTDOWN. Кроме того, завершение работы может быть вызвано МВМ при возникновении неисправимых ошибок технических средств, в результате которых невозможно функционирование конкретной ВМ или всей СВМ ЕС. [48]
Поскольку этот оператор завершает выполнение всей программы, он может использоваться только в головном модуле. В противном случае нарушается правило возврата в модуль верхнего уровня. Исключение из этого правила возможно только тогда, когда подчиненный модуль обнаруживает неисправимую ошибку и вынужден завершить выполнение всей программы. [49]
Этих операторов следует избегать, поскольку иначе будет задано несколько выходов. Так как STOP и EXIT заканчивают выполнение всей программы, они не должны появляться нигде, кроме головного сегмента; в противном случае будет нарушено правило возврата в точку вызова. EXIT или STOP в сегменте низшего уровня допустимы только тогда, когда в таком сегменте или модуле обнаружена неисправимая ошибка и нужно немедленно закончить работу программы. [50]