Прагма используется для задания информации компилятору. Прагма начинается зарезервированным словом 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.