У комп'ютерному програмуванні директива або прагма (від англ. pragmatic) — це мовна конструкція, яка вказує, як компілятор (або інший транслятор) має обробляти вхідні дані. Директиви не є частиною граматики мови програмування і можуть відрізнятися від компілятора до компілятора. Вони можуть оброблятися препроцесором для визначення поведінки компілятора або діяти як форма внутрішньосмугової[en] параметризації.
У деяких випадках директиви визначають глобальну поведінку, тоді як в інших вони впливають лише на локальний розділ, наприклад на блок програмного коду. Іноді, наприклад у деяких програмах на C, директиви є необов'язковими підказками для компілятора, і їх можна нехтувати, але зазвичай вони є наказовими, і їх потрібно дотримуватися. Однак директива не виконує жодної дії в самій мові, а лише змінює поведінку компілятора.
Цей термін може використовуватися для позначення власних тегів і команд (чи розмітки) сторонніх розробників, вбудованих у код, які призводять до додаткового опрацювання виконуваних файлів, що розширює конструкції компілятора, асемблера та мови, наявні в середовищі розробки. Термін «директива» також застосовують подібно до терміна команда.
Мови C і C++ підтримують простий препроцесор макросів. Вхідні рядки, які має опрацьовувати препроцесор, такі як #define
і #include
, називаються директивами препроцесора.
Інша конструкція C, директива #pragma
, використовується для вказання компілятору використовувати прагматичні або залежні від реалізації функції. До відомих застосувань цієї директиви належать OpenMP і OpenACC.
Синтаксичні конструкції, подібні до директив препроцесора C, такі як #if
у C#, також зазвичай називаються «директивами», хоча в цих випадках може не бути реальної фази попередньої обробки.
Усі команди препроцесора починаються з символу ґратки (#).
Директиви відомі з часів ALGOL 68, де вони відомі як прагмати (від англ. pragmatic) і позначаються pragmat або pr; у новіших мовах, зокрема C, назву і позначення скорочено до «pragma» (без «t»).
Звичним у ALGOL 68 є використання прагматів для визначення режиму стропінгу[en], тобто «як вказуються ключові слова». Далі йдуть різні директиви, які визначають режими POINT, UPPER, RES (зарезервовано) або котирування. Зверніть увагу на використання стропінгу для самого ключового слова pragmat (скорочено pr), а також на режими з крапками або в лапках:
. PR POINT . PR . PR UPPER . PR . PR RES . PR 'pr' цитата 'pr'
Нині директиви, найвідоміші в мові C від початку 1970-х років, є в поточному стандарті C99, де вони є або інструкціями для препроцесора C, або, у формі #pragma
, директивами для самого компілятора. Вони також певною мірою використовуються в сучасніших мовах (див. нижче).
declare
(також proclaim
або declaim
). [1] За одним винятком, декларації є необов'язковими і не впливають на семантику програми. Єдиним винятком є special
, який необхідно вказати, де це необхідно.#include "file"
є значущий коментар {$I "file"}
.use
», яке імпортує модулі, також може використовуватися для визначення директив, наприклад use strict;
або use utf8;
.{-# INLINE foo #-}
[2].from __future__ import feature
(визначено в PEP 236[3]), яка змінює мовні функції (і використовує синтаксис імпорту модуля, як у Perl), і директиву coding
(у коментарі) для зазначення кодування сирцевого файлу (визначено в PEP 263[4]). Дещо загальніший синтаксис для директив запропоновано та відхилено в PEP 244[5]. Все це датується 2001 роком.use
, з тією різницею, що прагми оголошуються як рядкові літерали (наприклад, "use strict";
, або "use asm";
), а не як виклик функції.Option
»:
Option Explicit On|Off
— коли ввімкнено (On), забороняє неявне оголошення змінних під час першого використання, що вимагає попереднього явного оголошення.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
— коли увімкнено, забороняє:
Object
.Long
до Integer
, Object
до String
, Control
до TextBox
) були в коді явними, тобто, з використанням операторів перетворення (наприклад CInt
, DirectCast
, CType
).Option Infer On|Off
— коли увімкнено (On
), компілятор може визначати тип локальних змінних за їх ініціалізаторами.ключ: значення
. Наприклад, coding: UTF-8
вказує, що у файлі використано кодування символів UTF-8..
END
наказує асемблеру припинити збирання коду).PL/SQL has a PRAGMA keyword with the following syntax: PRAGMA instruction_to_compiler; [...] PL/SQL offers several pragmas [...]