Справочник по Ada 95
3.11.1 Завершение объявлений
Объявления иногда состоят из двух частей. Объявление, требующее второй части, считается требующим завершения. Вторая часть называется завершением объявления (и объявленного сущности) и представляет собой другое объявление, тело или pragma. Тело — это тело, тело_входной_точки или переименование-как-тело (см. 8.5.4).
Правила разрешения имен
Конструкцию, которая может быть завершением, интерпретируют как завершение предыдущего объявления только если:
- Объявление и завершение находятся непосредственно в одной и той же области объявления;
- Идентификатор или имя_программы в завершении совпадают с идентификатором или имя_программы в объявлении, или, в случае pragma, pragma применяется к объявлению;
- Если объявление перегружаемо, то завершение имеет профиль, согласующийся с типом, или является pragma.
Правила законности
Неявное объявление не должно иметь завершение. Для каждого явного объявления, указанного как требующее завершения, должно быть соответствующее явное завершение.
Для данного объявления разрешено не более одного завершения. Дополнительные требования к завершениям приведены в определении каждого типа завершения.
Тип считается полностью определённым в месте, расположенном после полного определения типа (если оно есть) и после полного определения всех его подкомпонентов. Тип должен быть полностью определён до его заморозки (см. 13.14 и 7.3).
ПРИМЕЧАНИЯ
88 В принципе, завершения разрешены для любого вида явного объявления. Однако для некоторых видов объявлений единственным допустимым завершением является pragma Import, и реализации не обязаны поддерживать pragma Import для каждого вида сущности.
89 Существуют правила, предотвращающие преждевременное использование объявлений, имеющих соответствующее завершение. Контроли Elaboration_Checks из 3.11 предотвращают такие использования во время выполнения для подпрограмм, защищённых операций, задач и обобщённых единиц. Правила из 13.14, «Правила заморозки», предотвращают преждевременное использование других сущностей, таких как частные типы и отложенные константы во время компиляции.