Справочное руководство по языку Ада-83

         

Прагмы


Прагма используется для задания информации компилятору. Прагма начинается зарезервированным словом pragma, за которым следует идентификатор — имя прагмы.

прагма ::=pragma идентификатор [(сопоставление-аргумента {, сопоставление-аргумента })];

сопоставление-аргумента ::= [идентификатор-аргумента => ] имя [идентификатор-аргумента => ] выражение

Прагмы допустимы только в следующих местах программы:

• После ограничителя точки с запятой, но не внутри раздела формальных параметров или раздела дискриминантов.

• В любом месте, где синтаксические правила допускают синтаксические понятия, в названии которых содержатся слова «описание», «оператор», «спецификатор» или «альтернатива», или одно из синтаксических понятий—вариант и обработчик исключений, но не вместо соответствующих конструкций, а также в любом месте, где допустим компилируемый модуль.

На месторасположение отдельных прагм могут накладываться дополнительные ограничения.

Некоторые прагмы имеют аргументы. Сопоставления аргументов могут быть либо позиционными, либо именованными, как и при сопоставлении параметров в вызовах подпрограмм (см. 6.4). Однако именованные сопоставления возможны, если определены идентификаторы аргументов. Именем аргумента должно быть либо имя, видимое в месте употребления прагмы, либо идентификатор, специфический для этой прагмы.

Предопределенные прагмы описаны в приложении В; они должны поддерживаться в каждой реализации. Реализация может определить дополнительные прагмы. Они должны быть описаны в приложении F. Реализация не должна допускать определение прагм, наличие или отсутствие которых влияет на правильность текста программы. Следовательно, правильность программы не зависит от наличия или отсутствия прагм, определенных реализацией.

Прагма, не определенная в языке, не дает никакого результата, если ее идентификатор не распознан (данной) реализацией. Более того, прагма (как определенная в языке, так и определенная реализацией) не дает никакого результата, если ее размещение или ее аргументы не соответствуют допустимым для прагмы.


Участок текста, на который распространяется действие прагмы, зависит от прагмы.

Примеры:

pragma LIST(OFF); pragma OPTIMIZE(TIME); pragma INLINE(SETMASK); pragma SUPPRESS(RANGE_CHECK, ON => INDEX);



Примечание.

Рекомендуется (но не требуется), чтобы реализация выдавала предупреждающие сообщения о прагмах, которые не распознаны и поэтому проигнорированы.

Ссылки:

вариант 3.7.3, видимость 8.3, выражение 4.4, компилируемый модуль 10.1, зарезервированное слово 2.9, идентификатор 2.3, имя 4.1, обработчик исключения 11.2, ограничитель 2.2, оператор 5, правильный 1.6, прагма, зависящая от реализации F, прагма, зависящая от языка В, раздел дискриминантов 3.7.1, статическое выражение 4.9.

Понятие со словом «описание»:

описание входа 9.5, описание компоненты 3.7, описание параметра настройки 12.1, основное описание 3.1.

Понятие со словом «спецификатор>:

спецификатор выравнивания 13.4, спецификатор использования 8.4, спецификатор компоненты 13.4, спецификатор контекста 10.1.1, спецификатор представления 13.1, спецификатор совместности 10.1.1.

Понятие со словом «альтернатива»:

альтернатива завершения 9.7.1, альтернатива задержки 9.7.1, альтернатива оператора выбора 5.4, альтернатива отбора 9.7.1, альтернатива отбора с ожиданием 9.7.1, альтернатива принятия 9.7.1.

Пред.  Уровень выше  След.

2.7. КОММЕНТАРИИ   Содержание   2.9. ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

Содержание раздела