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


Описания исключений


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

описание-исключения ::= список-идентификаторов: exception;

Описание исключения с несколькими идентификаторами эквивалентно последовательности единичных описаний с одним идентификатором (см. 3.2). Каждое единичное описание исключения задает имя отличного от других исключения. В частности, если настраиваемый модуль содержит описание исключения, то такие описания, неявно сгенерированные различными конкретизациями настройки, ссылаются на разные исключения (но все они имеют один и тот же идентификатор). Конкретное исключение, обозначенное именем, определяется во время компиляции и является одним и тем же независимо от числа предвыполнений его описания. Следовательно, если описание исключения находится в рекурсивной подпрограмме, то имя исключения обозначает одно и то же исключение для всех вызовов рекурсивной подпрограммы.

В языке предопределены следующие исключения. Они возбуждаются при обнаружении описанных ниже ситуаций.



CONSTRAINT_ERROR

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

пустое

NUMERIC_ERROR

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

PROGRAM_ERROR

Это исключение возбуждается при попытке вызвать подпрограмму, активизировать задачу или предвыполнить конкретизацию настройки, если тело соответствующего модуля еще не предвыполнено. Оно также возбуждается, если выполнение функции завершается через end (см. 6.5), при выполнении оператора отбора с ожиданием, когда отсутствует раздел else, a все альтернативы закрыты (см. 9.7.1). Наконец, в зависимости от реализации исключение может возбуждаться при попытке выполнить ошибочное действие и при некорректной зависимости от порядка (см. 1.6).

STORAGE_ERROR

Это исключение возбуждается в одной из следующих ситуаций: при вычислении генератора; когда не хватает динамической памяти, выделенной для задачи; когда исчерпана память для набора генерируемых объектов; при предвыполнений элемента описания или при вызове подпрограммы, если памяти

недостаточно.

TASKING_ERROR

Это исключение возбуждается при возбуждении исключений во время взаимодействия задач (см. 9 и 11.5).

<


/p>

Примечание.
Описанные выше ситуации могут возникать, не возбуждая соответствующих исключений, если была использована прагма SUPPRESS подавления проверок (см. 11.7).
Примеры описанных пользователем исключений:
SINGULAR : exception; ERROR : exception; OVERFLOW, UNDERFLOW : exception;
Ссылки:
вещественный тип 3.5.6, задача 9, идентификатор 2.3, имя 4.1, исключение 11, компонента записи 3.7, конкретизация 12.3, конкретизация настройки 12.3, набор 3.8, настраиваемое тело 12.2, настраиваемый модуль 12, неявное описание 12.3, обработчик исключения 11.2, объект 3.2, оператор возбуждения 11.3, оператор возврата 5.8, описание 3.1, подпрограмма 6, ссылочное значение 3.8, тело задачи 9.1, тело подпрограммы 6.3.
Контекст исключения
CONSTRAINT_ERROR: агрегат 4.3.1, 4.3.2, атрибут дискретного типа 3.5.5, генератор 4.8, именованная компонента 4.1.3, индекс входа 9.5, индексированная компонента 4.1.1, квалифицированное выражение 4.7, логическая операция 4.5.1, ограничение 3.3.2, ограничение диапазона 3.5, ограничение дискриминанта 3.7.2, ограничение индекса 3.6.1, оператор присваивания 5.2, 5.2.1, операция возведения в степень 4.5.6, описание объекта 3.2.1, отрезок 4.1.2, преобразование типа 4.6, предвыполнение формального параметра настройки 12.3, пустое ссылочное значение 3.8, сопоставление параметров 6.4.1, указание подтипа 3.3.2.
Контекст исключения
NUMERIC_ERROR: атрибут дискретного типа 3.5.5, неявное преобразование 3.5.4, 3.5.6, 4.6, операция над числовым типом 4.5, 4.5.7, числовая операция 3.5.5, 3.5.8, 3.5.10.
Контекст исключения
PROGRAM_ERROR: выход из функции 6.5, контроль предвыполнения 3.9, 7.3, 9.3, 12.2, набор 3.8, некорректная зависимость от порядка 1.6, отбор с ожиданием 9.7.1, ошибочный 1.6, предвыполнение 3.9.
Контекст исключения
STORAGE_ERROR: генератор 4.8.
Контекст исключения
TASKING_ERROR: активизация задачи 9.3, вызов входа 9.5, 9.7.2, 9.7.3, исключения при взаимодействии задач 11.5, оператор прекращения 9.10.

Пред.  Уровень выше  След.
10.6. ОПТИМИЗАЦИЯ ПРОГРАММЫ
 
Содержание  
11.2. ОБРАБОТЧИКИ ИСКЛЮЧЕНИЙ
Содержание раздела