Директива (программирование)

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

Язык ассемблера

[править | править код]

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

Препроцессор Си

[править | править код]

В языки программирования C и C++ встроена поддержка препроцессора. Строки в исходном коде, которые должны быть обработаны препроцессором в виде #define и #include, называются препроцессорными директивами.

В других языках высокого уровня

[править | править код]

Синтаксические конструкции, похожие на препроцессорные директивы языка Си, такие как #region в языке C#, также часто называются «директивами», хотя в указанных случаях стадии обработки препроцессором может и не быть.

В языке Ада директивы компилятора называются прагмами (сокращение от «pragmatic information» («полезная информация»)).

В Паскале директивы называются указательными комментариями из-за того, что по синтаксису похожи на комментарии. В Паскале указательный комментарий — это комментарий, у которого первым символом указан знак доллара; например, аналогом директивы #include "file" языка Си будет указательный комментарий {$I "file"}.

В Perl ключевое слово «use» («применять») можно использовать как «прагму», например use strict; или use utf8;. Такая конструкция иногда может упоминаться как «директива». Тем не менее, в некоторых источниках[1] используется термин «директивы Perl» для обозначения конструкций типа Шебанг.

В языке Haskell есть собственный набор прагм. Они позволяют включать расширения языка, передавать параметры компиляции, также есть специальные прагмы. Например {-# INLINE #-}, {-# NOINLINE #-} указывают компилятору что нужно/не нужно встраивать функцию (аналог ключевого слова inline в Си). {-# UNBOXED #-} позволяет хранить данные без служебной информации (эффективность по памяти в ущерб гибкости использования). {-# SPECIALIZE #-} используется для переопределения специальных представителей класса типов в исключительных ситуациях. Есть также расширения HPP — собственный препроцессор Haskell и CPP (C PreProcessor) — вызов препроцессора Си.

Примечания

[править | править код]