В компьютерном программировании директива или прагма (от слова «прагматический») — это языковая конструкция , которая определяет, как компилятор ( или другой транслятор ) должен обрабатывать вводимые данные. В зависимости от языка программирования директивы могут быть или не быть частью грамматики языка и могут различаться от компилятора к компилятору. Они могут обрабатываться препроцессором для указания поведения компилятора или функционировать как форма внутриполосной параметризации.
В некоторых случаях директивы определяют глобальное поведение, тогда как в других случаях они влияют только на локальный раздел, например блок программного кода. В некоторых случаях, например в некоторых программах на языке C, директивы являются необязательными подсказками компилятора и могут игнорироваться, но обычно они носят предписывающий характер и должны соблюдаться. Однако директива не выполняет никаких действий в самом языке, а лишь изменяет поведение компилятора.
Этот термин может использоваться для обозначения проприетарных сторонних тегов и команд (или разметки), встроенных в код, которые приводят к дополнительной обработке исполняемого файла, расширяющей существующие конструкции компилятора, ассемблера и языка, присутствующие в среде разработки. Термин «директива» также применяется различными способами, похожими на термин « команда» .
В C и C++ язык поддерживает простой препроцессор макросов . Строки исходного кода, которые должны обрабатываться препроцессором, например и, называются директивами препроцессора .#define
#include
Другая конструкция C, #pragma
директива, используется для указания компилятору использовать прагматические или зависящие от реализации функции. Двумя известными пользователями этой директивы являются OpenMP и OpenACC .
Синтаксические конструкции, подобные директивам препроцессора C, например C# , #if
также обычно называются «директивами», хотя в этих случаях может не быть какой-либо реальной фазы предварительной обработки.
Все команды препроцессора начинаются с символа решетки (#), за исключением директив импорта и модуля в C++ . [1]
Директивы датируются JOVIAL . [2]
COBOL Имел директиву COPY.
В АЛГОЛе 68 директивы известны как прагматы (от «прагматический») и обозначаются прагматами или pr ; в новых языках, особенно в C, это слово сокращается до «прагма» (без «т»).
Обычное использование прагматов в АЛГОЛе 68 заключается в указании режима ограничения , что означает «как обозначаются ключевые слова». Далее следуют различные подобные директивы, определяющие режимы POINT, UPPER, RES (зарезервировано) или котировки. Обратите внимание на использование ограничения для самого ключевого слова pragmat (сокращенно pr ) либо в режиме POINT, либо в режиме кавычки:
.PR ТОЧКА .PR.PR ВЕРХНИЙ .PR.PR РЕС .PR'пр' цитирую 'пр'
Сегодня директивы наиболее известны в языке C начала 1970-х годов и продолжаются до текущего стандарта C99 , где они представляют собой либо инструкции для препроцессора C , либо, в форме #pragma
директив для самого компилятора. Они также в некоторой степени используются в более современных языках; см. ниже.
declare
конструкции (также proclaim
или declaim
). [3] За одним исключением, объявления не являются обязательными и не влияют на семантику программы. Единственным исключением является special
, который необходимо указать там, где это необходимо.#include "file"
директивы C является значимый комментарий {$I "file"}
.use
", которое импортирует модули, также может использоваться для указания директив, таких как use strict;
или use utf8;
.{-# INLINE foo #-}
. [4]declare(strict_types=1)
.from __future__ import feature
(определенные в PEP 236 — «Назад в __future__»), которые изменяют функции языка (и используют существующий синтаксис импорта модулей, как в Perl), и директиву coding
(в комментарии), определяющую кодировку файл исходного кода (определенный в PEP 263 — Определение кодировки исходного кода Python). Более общее заявление о директиве было предложено и отклонено в документе PEP 244 — «Директива»; все они датируются 2001 годом.use
синтаксис директив с той разницей, что прагмы объявляются как строковые литералы (например "use strict";
, или "use asm";
), а не как вызов функции.Option
» используется для директив:Option Explicit On|Off
- При включении запрещается неявное объявление переменных при первом использовании, требующем явного объявления заранее.Option Compare Binary
- Результаты сравнения строк на основе порядка сортировки, полученного из внутренних двоичных представлений символов - например, для английской/европейской кодовой страницы (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø. Влияет на встроенные операторы (например, =, <>, <, >), блок Select Case и строковые функции библиотеки времени выполнения VB (например, InStr).Option Compare Text
- Результаты сравнения строк на основе порядка сортировки текста без учета регистра, определенного языковым стандартом вашей системы - например, для английской/европейской кодовой страницы (ANSI 1252) (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). Влияет на встроенные операторы (например, =, <>, <, >), блок Select Case и строковые функции библиотеки времени выполнения VB (например, InStr).Option Strict On|Off
- Когда включено запрещение:Option Infer On|Off
- Когда включено, компилятор определяет тип локальных переменных на основе их инициализаторов.key: value
нотацией. Например, coding: UTF-8
указывает, что файл закодирован с помощью кодировки символов UTF-8 ..END
, которая может указать ассемблеру прекратить ассемблирование кода.В PL/SQL есть ключевое слово PRAGMA со следующим синтаксисом: PRAGMA Instruction_to_compiler ; [...] PL/SQL предлагает несколько прагм [...]