Справочное руководство по языку Ада-83


Обработка исключений - часть 3


1. Если исключение ERROR возбуждено при выполнении последовательности операторов внешней процедуры P, то выполнение процедуры Р заканчивает обработчик Е1, расположенный внутри Р.

2. Если исключение ERROR возбуждено при выполнении последовательности операторов процедуры Q, то обработчик Е2, расположенный внутри Q, закончит ее выполнение. По окончании выполнения этого обработчика управление будет возвращено в точку вызова процедуры Q.

3. Если исключение ERROR возбуждено в теле процедуры R, вызываемой из процедуры Q, то выполнение процедуры R прекращается и то же самое исключение возбуждается в теле Q. Затем обработчик Е2 заканчивает выполнение процедуры Q, как и в случае 2.

Заметим, что в случае 3 возбуждение исключения в R приводит (косвенно) к передаче управления обработчику, являющемуся частью Q и, следовательно, не вложенному в R. Заметим также, что если бы внутри R был задан обработчик с выбором

others,

то в случае 3 вместо непосредственного завершения R выполнился бы этот обработчик.

Наконец, если бы исключение ERROR было описано в R, а не в Р, то обработчики Е1 и Е2 не могли бы обеспечивать обработку исключения ERROR, так как этот идентификатор не был бы видимым внутри тел Р и Q. В случае 3, однако, это исключение могло бы быть обработано в Q с помощью обработчика с выбором исключения

others.

Примечание.

В языке не определено, что происходит после прекращения выполнения главной программы в результате необработанного исключения.

Предопределенные исключения — это исключения, которые могут распространяться базовыми и предопределенными операциями.

Случай, когда окружением является настраиваемый модуль, уже был учтен в правилах для тел подпрограмм и пакетов, так как последовательность операторов такого окружения не выполняется, а служит шаблоном для конкретизации настройки соответствующей последовательности операторов подпрограммы или пакета.

Ссылки:

базовая операция типа 3.3.3, библиотечный модуль 10.1, вызов подпрограммы 6.4, выполнение 9.4, главная программа 10.1, зависимая задача 9.4, задача 9, исключение 11, исключение NUMERIC_ERROR 11.1, конкретизация настройки 12.3, настраиваемый модуль 12, обработчик исключения 11.2, окружение 11.1, оператор 5, оператор блока 5.6, оператор принятия 9.5, пакет 7, подпрограмма 6, последовательность операторов 5.1, предвыполнение 3.1, 3.9, предопределенная операция 4.5, процедура 6.1, раздел описаний 3.9, след тела 10.2, субмодуль 10.2, тело задачи 9.1, тело пакета 7.1, тело подпрограммы 6.3, элемент описания 3.9.




Начало  Назад  Вперед