Справочник по Ada 2012
10.1.5 Директивы и программные единицы
В данном подпункте рассматриваются директивы, относящиеся к программным единицам, единицам библиотек и компиляциям.
Правила разрешения имен
Определены некоторые директивы как директивы программных единиц. Имя, используемое в качестве аргумента директивы программной единицы, должно разрешаться для обозначения объявлений или переименований одной или нескольких программных единиц, которые находятся непосредственно внутри области объявления или компиляции, в которой непосредственно встречается директива, или оно должно разрешаться для обозначения объявления непосредственно охватывающей программной единицы (если таковая имеется); директива применяется к обозначенной(ым) программной(ым) единице(ам). Если в качестве аргументов не указано никаких имен, то директива применяется к непосредственно охватывающей программной единице.
Правила легитимности
Директива программной единицы должна появляться в одном из следующих мест:
- В месте единицы_компиляции, в этом случае директива должна непосредственно следовать за объявлением_единицы_библиотеки, являющейся объявлением_подпрограммы, объявлением_обобщенной_подпрограммы или инстанциацией_обобщения, и директива должна иметь аргумент, являющийся именем, обозначающим это объявление.
- Непосредственно внутри видимой части программной единицы и перед любым вложенным объявлением (но не внутри формальной части обобщения), в этом случае аргумент, если таковой имеется, должен быть прямым_именем, обозначающим объявление непосредственно охватывающей программной единицы.
- В месте объявления, отличного от первого, части_объявлений или объявления программной единицы, в этом случае директива должна иметь аргумент, который должен быть прямым_именем, обозначающим одну или несколько из следующих (и ничего больше): объявление_подпрограммы, объявление_обобщенной_подпрограммы или инстанциацию_обобщения, той же самой части_объявлений или объявления программной единицы.
Некоторые директивы программных единиц определены как директивы единиц библиотек. Если директива единицы библиотеки применяется к программной единице, то эта программная единица должна быть единицей библиотеки.
Статическая семантика
Директива единицы библиотеки, применяемая к обобщенной единице, не применяется к её инстанциям, если конкретное правило для директивы не указывает обратное.
Правила после компиляции
Некоторые директивы определены как директивы конфигурации; они должны появляться перед первой единицей_компиляции в компиляции. Они обычно используются для выбора опции на уровне раздела или на уровне системы. Директива применяется ко всем единицам_компиляции, встречающимся в компиляции, если таковые имеются, в противном случае она применяется ко всем будущим единицам_компиляции, скомпилированным в ту же среду.
Разрешения реализации
Реализация может потребовать, чтобы директивы конфигурации, выбирающие опции на уровне раздела или на уровне системы, были скомпилированы, когда среда не содержит элементов_библиотеки, кроме тех, что входят в предопределённую среду. В этом случае реализация должна принять директивы конфигурации в отдельных компиляциях, подтверждающих первоначально выбранные опции на уровне раздела или на уровне системы.
Рекомендации для реализации
При применении к обобщенной единице, директива программной единицы, которая не является директивой единицы библиотеки, должна применяться к каждой инстанции обобщенной единицы, для которой не установлена переопределяющая директива, применённая непосредственно к инстанции.