Справочник Ada 95
7.4 Отложенные константы
Объявления отложенных констант могут использоваться для объявления констант во видимой части пакета, но значение константы задается в приватной части. Они также могут использоваться для объявления констант, импортированных из других языков (см. Приложение B).
Правила легальности
Объявление отложенной константы — это объявление_объекта с ключевым словом constant, но без выражения инициализации. Константа, объявленная отложенным объявлением, называется отложенной константой. Объявление отложенной константы требует завершения, которое должно быть полным объявлением константы (называемым полным объявлением отложенной константы) или pragma Import (см. Приложение B).
Объявление отложенной константы, завершенное полным объявлением, должно находиться непосредственно внутри видимой части спецификации_пакета. В этом случае к соответствующему полному объявлению применяются следующие дополнительные правила:
- Полное объявление должно находиться непосредственно внутри приватной части того же пакета;
- Отложенная и полная константы должны иметь один и тот же тип;
- Если подтип, определенный указанием подтипа subtype_indication в отложенном объявлении, ограничен, то подтип, определенный указанием подтипа subtype_indication в полном объявлении, должен статически соответствовать ему. С другой стороны, если подтип отложенной константы не ограничен, то полное объявление все еще может наложить ограничение. Сама константа будет ограничена, как и все константы;
- Если объявление отложенной константы включает ключевое слово aliased, то полное объявление также должно его включать.
Объявление отложенной константы, завершенное pragma Import, не обязательно должно появляться в видимой части спецификации_пакета, и не имеет полного объявления константы.
Завершение объявления отложенной константы должно произойти до того, как константа будет заморожена (см. 7.4).
Динамическая семантика
Выполнение объявления отложенной константы выполняет subtype_indication или (разрешено только в случае импортированной константы) array_type_definition.
ПРИМЕЧАНИЯ
12 Полное объявление константы для отложенной константы, которая является частного типа или частного расширения, не разрешено до соответствующего full_type_declaration. Это следствие правил заморозки для типов (см. 13.14).
Примеры
Примеры объявлений отложенных констант:
Null_Key : constant Key; -- см. 7.3.1
CPU_Identifier : constant String(1..8);
pragma Import(Assembler, CPU_Identifier, Link_Name => "CPU_ID");
-- см. B.1
pragma Import(Assembler, CPU_Identifier, Link_Name => "CPU_ID");
-- см. B.1