Введение

Языковая конструкция, определяющая, как компилятор должен обрабатывать входные данные.

В компьютерном программировании директива или прагма (от "прагматический") — это языковая конструкция, определяющая, как компилятор (или другой транслятор) должен обрабатывать входные данные. В зависимости от языка программирования, директивы могут быть частью грамматики языка или не быть ею, а также могут различаться в зависимости от компилятора. Они могут обрабатываться препроцессором для указания поведения компилятора или функционировать как форма параметризации, встроенной в код. В некоторых случаях директивы определяют глобальное поведение, а в других — влияют только на локальный участок, например, на блок программного кода. В некоторых случаях, например, в некоторых программах на языке C, директивы являются необязательными указаниями для компилятора и могут игнорироваться, но обычно они являются императивными и должны выполняться. Однако директива не выполняет никаких действий в самом языке, а лишь изменяет поведение компилятора. Этот термин также может использоваться для обозначения проприетарных сторонних тегов и команд (или разметки), встроенных в код, которые приводят к дополнительной исполняемой обработке, расширяющей существующие компиляторные, ассемблерные и языковые конструкции в среде разработки. Термин "директива" также применяется в различных контекстах, аналогичных термину "команда".

Препроцессор C

В C и C++ язык поддерживает простой макро-предпроцессор. Строки исходного кода, которые должны обрабатываться препроцессором, такие как #define и #include, называются директивами препроцессора. Другая конструкция языка C, директива #pragma, используется для указания компилятору использовать прагматические или зависящие от реализации возможности. Два известных примера использования этой директивы – OpenMP и OpenACC. Синтаксические конструкции, подобные директивам препроцессора C, такие как #if в C#, также обычно называются "директивами", хотя в этих случаях реальная фаза предварительной обработки может и не выполняться. Все команды препроцессора начинаются с символа решётки (#), за исключением директив импорта и модуля в C++.

Язык сборки

В языке ассемблера директивы, также называемые псевдооперациями или "псевдоопциями", обычно задают такую информацию, как целевая машина, обозначают границы между секциями кода, определяют и изменяют переменные времени сборки, определяют макросы, указывают на условный и повторяющийся код, определяют зарезервированные области памяти и так далее. Некоторые, но не все, ассемблеры используют специальный синтаксис для различения псевдоопераций и мнемоник команд, например, добавляя точку перед псевдооперацией, как в случае с псевдооперацией END, которая может предписать ассемблеру прекратить сборку кода.

PL/SQL

Процедурный язык PL/SQL корпорации Oracle включает в себя набор директив компилятора, известных как "прагмы".