Справочник по Ada 95
10.1.5 Прагмы и программные модули
В данном подпункте рассматриваются прагмы, относящиеся к программным модулям, библиотечным модулям и компиляциям.
Правила разрешения имен
Некоторые прагмы определены как прагмы программного модуля. Имя, указанное в качестве аргумента прагмы программного модуля, должно разрешаться как ссылка на объявления или переименования одного или нескольких программных модулей, которые встречаются непосредственно внутри области объявления или компиляции, в которой прагма встречается непосредственно, или оно должно разрешаться как ссылка на объявление непосредственно содержащего программного модуля (если таковой имеется); прагма применяется к обозначенному(ым) программному модулю(ям). Если аргументы не указаны, прагма применяется к непосредственно содержащему программному модулю.
Правила легальности
Прагма программного модуля должна появляться в одном из следующих мест:
- В месте compilation_unit, в этом случае прагма должна следовать непосредственно в той же компиляции (кроме других прагм) после library_unit_declaration, которая является subprogram_declaration, generic_subprogram_declaration или generic_instantiation, и прагма должна иметь аргументом имя, обозначающее это объявление.
- Непосредственно внутри объявления программного модуля и перед любым вложенным объявлением (но не внутри формальной части обобщения), в этом случае аргумент, если он есть, должен быть direct_name, который обозначает объявление непосредственно содержащего программного модуля.
- В месте объявления, отличного от первого, declarative_part или объявления программного модуля, в этом случае прагма должна иметь аргумент, который должен быть direct_name, обозначающим один или несколько из следующих (и ничего более): subprogram_declaration, generic_subprogram_declaration или generic_instantiation той же declarative_part или объявления программного модуля.
Некоторые прагмы программных модулей определены как прагмы библиотечных модулей. Имя, если оно есть, в прагме библиотечного модуля должно обозначать объявление библиотечного модуля.
Статическая семантика
Прагма библиотечного модуля, применяемая к обобщенному модулю, не применяется к его экземплярам, если для прагмы не указано иное.
Правила после компиляции
Некоторые прагмы определены как конфигурационные прагмы; они должны появляться перед первой compilation_unit компиляции. Они обычно используются для выбора варианта, относящегося к всей части или всему системному варианту. Прагма применяется ко всем compilation_units, появляющимся в компиляции, если таковые отсутствуют, в противном случае, она применяется ко всем последующим compilation_units, скомпилированных в ту же среду.
Разрешения для реализации
Реализация может вводить ограничения на конфигурационные прагмы, при условии, что она позволяет использовать их, когда среда не содержит элементов library_item помимо тех, что входят в предопределенную среду.
Рекомендации для реализации
При применении к обобщенному модулю прагма программного модуля, которая не является прагмой библиотечного модуля, должна применяться к каждому экземпляру обобщенного модуля, для которого нет переопределяющей прагмы, примененной непосредственно к экземпляру.