Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

6.5.1 Невозвращаемые подпрограммы

Указание атрибута No_Return со значением True указывает, что подпрограмма не может возвратиться обычным способом; она может, например, породить исключение или зациклиться.
Абзацы 2 и 3 были перемещены в Приложение J, «Устаревшие возможности».

Статическая семантика

Для подпрограммы или обобщённой подпрограммы может быть указан следующий определяемый языком атрибут:
No_Return
Тип атрибута No_Return — Boolean. Когда атрибут No_Return имеет значение True для сущности, эта сущность называется невозвращаемой.
Если он указан напрямую, то определение_атрибута должно быть статическим выражением. Если он не указан напрямую, а подпрограмма является примитивной подпрограммой, унаследованной от производного типа, то атрибут имеет значение True, если соответствующая подпрограмма родительского или предкового типа является невозвращаемой. В противном случае атрибут имеет значение False.
Если обобщённая подпрограмма является невозвращаемой, то таковыми являются и её экземпляры. Если подпрограмма, объявленная в обобщённом блоке, является невозвращаемой, то таковыми являются и соответствующие копии этой подпрограммы в экземплярах.

Правила законности

Атрибут No_Return не должен быть указан для пустой процедуры или экземпляра обобщённого блока.
Оператор возврата не должен применяться к невозвращаемой процедуре или обобщённой процедуре.
Любой оператор возврата, применяемый к невозвращаемой функции или обобщённой функции, должен быть оператором_возврата_простым с выражением, являющимся выражением_вызова_исключения, вызовом невозвращаемой функции или скобочным выражением одного из этих типов.
Подпрограмма должна быть невозвращаемой, если она переопределяет диспетчерскую невозвращаемую подпрограмму. В дополнение к местам, где обычно применяются правила законности (см. 12.3), это правило применяется также в частной части экземпляра обобщённого блока.
Если переименование-как-тело завершает объявление невозвращаемой подпрограммы, то переименованная подпрограмма должна быть невозвращаемой.
Абзац 8 был удалён.

Динамическая семантика

Если тело невозвращаемой процедуры завершается нормально, в точке вызова возникает ошибка Program_Error.

Примеры

Пример указания атрибута No_Return:
procedure Fail(Msg : String) -- порождает исключение Fatal_Error
with No_Return;
-- Сообщает компилятору и читателю, что процедура никогда не возвращается нормально


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API