У комп'ютерному програмуванні директива або прагма (від англ. 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
, директивами для самого компілятора. Вони також певною мірою використовуються в сучасніших мовах (див. нижче).
Інші мови
- В Ada директиви компілятора називають прагмами (pragma; скорочено від «прагматична інформація»).
- У Common Lisp директиви називають деклараціями і вказують за допомогою конструкції
declare
(такожproclaim
абоdeclaim
). За одним винятком, декларації є необов'язковими і не впливають на семантику програми. Єдиним винятком єspecial
, який необхідно вказати, де це необхідно. - У Turbo Pascal директиви називають значущими коментарями, оскільки в граматиці мови їх синтаксис такий самий, як у коментарів. У Turbo Pascal значущим коментарем є коментар, перший символ якого — це знак долара ($), а другий — буква; наприклад, еквівалентом директиви C
#include "file"
є значущий коментар{$I "file"}
. - У Perl ключове слово «
use
», яке імпортує модулі, також може використовуватися для визначення директив, наприкладuse strict;
абоuse utf8;
. - Прагми Haskell визначаються за допомогою спеціального синтаксису коментарів, наприклад
{-# INLINE foo #-}
. - Python має дві директиви —
from __future__ import feature
(визначено в PEP 236), яка змінює мовні функції (і використовує синтаксис імпорту модуля, як у Perl), і директивуcoding
(у коментарі) для зазначення кодування сирцевого файлу (визначено в PEP 263). Дещо загальніший синтаксис для директив запропоновано та відхилено в PEP 244. Все це датується 2001 роком. - ECMAScript також використовує для директив синтаксис
use
, з тією різницею, що прагми оголошуються як рядкові літерали (наприклад,"use strict";
, або"use asm";
), а не як виклик функції. - У Visual Basic для директив використовують ключове слово «
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
. - пізнє зв'язування (тобто динамічна відправка до об'єктів CLR, DLR і COM) для значень, статично введених як Object.
- неявні перетворення звуження — вимагають, щоб усі перетворення у вужчі типи (наприклад, від
Long
доInteger
,Object
доString
,Control
доTextBox
) були в коді явними, тобто, з використанням операторів перетворення (наприкладCInt
,DirectCast
,CType
).
- безтипове програмування — де оголошення, які не мають явного типу, неявно вводяться як
Option Infer On|Off
— коли увімкнено (On
), компілятор може визначати тип локальних змінних за їх ініціалізаторами.
- У Ruby директиви інтерпретатора називаються прагмами і визначаються коментарями у верхній частині файлу у форматі
ключ: значення
. Наприклад,coding: UTF-8
вказує, що у файлі використано кодування символів UTF-8. - У C# директиви компілятора називають директивами попередньої обробки. Існують різні директиви компілятора, зокрема #pragma, яка використовується для керування попередженнями компілятора та контрольними сумами налагоджувача.
- СУБД SQLite містить директиву PRAGMA, за допомогою якої вводять команди, які не сумісні з іншими СУБД.
Мова асемблера
- У мові асемблера директиви, які також називають псевдоопераціями, зазвичай вказують таку інформацію, як цільова машина, відокремлюють розділи коду, викликають макроси, визначають зарезервовані ділянки пам'яті тощо. Щоб відрізнити псевдооперації від мнемоніки інструкцій, асемблери використовують специфічний синтаксис, наприклад, перед псевдооперацією ставиться крапка (наприклад, псевдооперація
.
END
наказує асемблеру припинити збирання коду).
PL/SQL
- Процедурна мова (PL/SQL) корпорації Oracle включає набір директив компілятора, відомих як «прагми».
Див. також
- #pragma once – директива препроцесора в Сі та C++
Примітки
- Steele, 1990, Chapter 9: Declarations, p. 215–237.
- . GHC 7.8.3 Documentation. Архів оригіналу за 26 липня 2014. Процитовано 18 липня 2014.
- . peps.python.org. Архів оригіналу за 7 квітня 2022. Процитовано 4 квітня 2022.
- . peps.python.org. Архів оригіналу за 4 квітня 2022. Процитовано 4 квітня 2022.
- . peps.python.org. Архів оригіналу за 4 квітня 2022. Процитовано 4 квітня 2022.
- dotnet-bot. . docs.microsoft.com (en-us) . Архів оригіналу за 4 квітня 2022. Процитовано 1 листопада 2019.
- BillWagner. . docs.microsoft.com (en-us) . Архів оригіналу за 28 січня 2021. Процитовано 1 листопада 2019.
- . www.sqlite.org. Архів оригіналу за 8 квітня 2022. Процитовано 4 квітня 2022.
- ; Pribyl, Bill. (вид. 6). O'Reilly Media, Inc. ISBN . Архів оригіналу за 4 квітня 2022. Процитовано 16 червня 2016.
PL/SQL has a PRAGMA keyword with the following syntax: PRAGMA instruction_to_compiler; [...] PL/SQL offers several pragmas [...]
Посилання
- Вебсайт OpenMP [ 20 липня 2008 у Wayback Machine.]
- Вебсайт OpenACC [ 15 червня 2012 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U komp yuternomu programuvanni direktiva abo pragma vid angl pragmatic ce movna konstrukciya yaka vkazuye yak kompilyator abo inshij translyator maye obroblyati vhidni dani Direktivi ne ye chastinoyu gramatiki movi programuvannya i mozhut vidriznyatisya vid kompilyatora do kompilyatora Voni mozhut obroblyatisya preprocesorom dlya viznachennya povedinki kompilyatora abo diyati yak forma en parametrizaciyi U deyakih vipadkah direktivi viznachayut globalnu povedinku todi yak v inshih voni vplivayut lishe na lokalnij rozdil napriklad na blok programnogo kodu Inodi napriklad u deyakih programah na C direktivi ye neobov yazkovimi pidkazkami dlya kompilyatora i yih mozhna nehtuvati ale zazvichaj voni ye nakazovimi i yih potribno dotrimuvatisya Odnak direktiva ne vikonuye zhodnoyi diyi v samij movi a lishe zminyuye povedinku kompilyatora Cej termin mozhe vikoristovuvatisya dlya poznachennya vlasnih tegiv i komand chi rozmitki storonnih rozrobnikiv vbudovanih u kod yaki prizvodyat do dodatkovogo opracyuvannya vikonuvanih fajliv sho rozshiryuye konstrukciyi kompilyatora asemblera ta movi nayavni v seredovishi rozrobki Termin direktiva takozh zastosovuyut podibno do termina komanda Preprocesor CMovi C i C pidtrimuyut prostij preprocesor makrosiv Vhidni ryadki yaki maye opracovuvati preprocesor taki yak define i include nazivayutsya direktivami preprocesora Insha konstrukciya C direktiva pragma vikoristovuyetsya dlya vkazannya kompilyatoru vikoristovuvati pragmatichni abo zalezhni vid realizaciyi funkciyi Do vidomih zastosuvan ciyeyi direktivi nalezhat OpenMP i OpenACC Sintaksichni konstrukciyi podibni do direktiv preprocesora C taki yak if u C takozh zazvichaj nazivayutsya direktivami hocha v cih vipadkah mozhe ne buti realnoyi fazi poperednoyi obrobki Usi komandi preprocesora pochinayutsya z simvolu gratki IstoriyaDirektivi vidomi z chasiv ALGOL 68 de voni vidomi yak pragmati vid angl pragmatic i poznachayutsya pragmat abo pr u novishih movah zokrema C nazvu i poznachennya skorocheno do pragma bez t Zvichnim u ALGOL 68 ye vikoristannya pragmativ dlya viznachennya rezhimu en tobto yak vkazuyutsya klyuchovi slova Dali jdut rizni direktivi yaki viznachayut rezhimi POINT UPPER RES zarezervovano abo kotiruvannya Zvernit uvagu na vikoristannya stropingu dlya samogo klyuchovogo slova pragmat skorocheno pr a takozh na rezhimi z krapkami abo v lapkah PR POINT PR PR UPPER PR PR RES PR pr citata pr Nini direktivi najvidomishi v movi C vid pochatku 1970 h rokiv ye v potochnomu standarti C99 de voni ye abo instrukciyami dlya preprocesora C abo u formi pragma direktivami dlya samogo kompilyatora Voni takozh pevnoyu miroyu vikoristovuyutsya v suchasnishih movah div nizhche Inshi moviV Ada direktivi kompilyatora nazivayut pragmami pragma skorocheno vid pragmatichna informaciya U Common Lisp direktivi nazivayut deklaraciyami i vkazuyut za dopomogoyu konstrukciyi declare takozh proclaim abo declaim Za odnim vinyatkom deklaraciyi ye neobov yazkovimi i ne vplivayut na semantiku programi Yedinim vinyatkom ye special yakij neobhidno vkazati de ce neobhidno U Turbo Pascal direktivi nazivayut znachushimi komentaryami oskilki v gramatici movi yih sintaksis takij samij yak u komentariv U Turbo Pascal znachushim komentarem ye komentar pershij simvol yakogo ce znak dolara a drugij bukva napriklad ekvivalentom direktivi C include file ye znachushij komentar I file U Perl klyuchove slovo a rel nofollow class external text href http perldoc perl org functions use html use a yake importuye moduli takozh mozhe vikoristovuvatisya dlya viznachennya direktiv napriklad use strict abo use utf8 Pragmi Haskell viznachayutsya za dopomogoyu specialnogo sintaksisu komentariv napriklad INLINE foo Python maye dvi direktivi from future import feature viznacheno v PEP 236 yaka zminyuye movni funkciyi i vikoristovuye sintaksis importu modulya yak u Perl i direktivu coding u komentari dlya zaznachennya koduvannya sircevogo fajlu viznacheno v PEP 263 Desho zagalnishij sintaksis dlya direktiv zaproponovano ta vidhileno v PEP 244 Vse ce datuyetsya 2001 rokom ECMAScript takozh vikoristovuye dlya direktiv sintaksis use z tiyeyu rizniceyu sho pragmi ogoloshuyutsya yak ryadkovi literali napriklad use strict abo use asm a ne yak viklik funkciyi U Visual Basic dlya direktiv vikoristovuyut klyuchove slovo Option Option Explicit On Off koli vvimkneno On zaboronyaye neyavne ogoloshennya zminnih pid chas pershogo vikoristannya sho vimagaye poperednogo yavnogo ogoloshennya Option Compare Binary vmikaye porivnyannya ryadkiv na osnovi poryadku sortuvannya otrimanogo zi vnutrishnih dvijkovih podan simvoliv napriklad dlya anglijskoyi yevropejskoyi kodovoyi storinki ANSI 1252 A lt B lt E lt Z lt a lt b lt e lt z lt A lt E lt O lt a lt e lt o Vplivaye na vnutrishni operatori napriklad lt gt lt gt blok Select Case ta ryadkovi funkciyi biblioteki chasu vikonannya VB napriklad InStr Option Compare Text vmikaye porivnyannya ryadkiv na osnovi poryadku sortuvannya tekstu bez urahuvannya registru viznachenogo lokallyu sistemi napriklad dlya anglijskoyi yevropejskoyi kodovoyi storinki ANSI 1252 A a lt A a lt B b lt E e lt E e lt Z z lt O o Vplivaye na vnutrishni operatori napriklad lt gt lt gt blok Select Case ta ryadkovi funkciyi biblioteki chasu vikonannya VB napriklad InStr Option Strict On Off koli uvimkneno zaboronyaye beztipove programuvannya de ogoloshennya yaki ne mayut yavnogo tipu neyavno vvodyatsya yak Object piznye zv yazuvannya tobto dinamichna vidpravka do ob yektiv CLR DLR i COM dlya znachen statichno vvedenih yak Object neyavni peretvorennya zvuzhennya vimagayut shob usi peretvorennya u vuzhchi tipi napriklad vid Long do Integer Object do String Control do TextBox buli v kodi yavnimi tobto z vikoristannyam operatoriv peretvorennya napriklad CInt DirectCast CType Option Infer On Off koli uvimkneno On kompilyator mozhe viznachati tip lokalnih zminnih za yih inicializatorami U Ruby direktivi interpretatora nazivayutsya pragmami i viznachayutsya komentaryami u verhnij chastini fajlu u formati klyuch znachennya Napriklad coding UTF 8 vkazuye sho u fajli vikoristano koduvannya simvoliv UTF 8 U C direktivi kompilyatora nazivayut direktivami poperednoyi obrobki Isnuyut rizni direktivi kompilyatora zokrema pragma yaka vikoristovuyetsya dlya keruvannya poperedzhennyami kompilyatora ta kontrolnimi sumami nalagodzhuvacha SUBD SQLite mistit direktivu PRAGMA za dopomogoyu yakoyi vvodyat komandi yaki ne sumisni z inshimi SUBD Mova asemblera U movi asemblera direktivi yaki takozh nazivayut psevdooperaciyami zazvichaj vkazuyut taku informaciyu yak cilova mashina vidokremlyuyut rozdili kodu viklikayut makrosi viznachayut zarezervovani dilyanki pam yati tosho Shob vidrizniti psevdooperaciyi vid mnemoniki instrukcij asembleri vikoristovuyut specifichnij sintaksis napriklad pered psevdooperaciyeyu stavitsya krapka napriklad psevdooperaciya END nakazuye asembleru pripiniti zbirannya kodu PL SQL Procedurna mova PL SQL korporaciyi Oracle vklyuchaye nabir direktiv kompilyatora vidomih yak pragmi Div takozh pragma once direktiva preprocesora v Si ta C PrimitkiSteele 1990 Chapter 9 Declarations p 215 237 GHC 7 8 3 Documentation Arhiv originalu za 26 lipnya 2014 Procitovano 18 lipnya 2014 peps python org Arhiv originalu za 7 kvitnya 2022 Procitovano 4 kvitnya 2022 peps python org Arhiv originalu za 4 kvitnya 2022 Procitovano 4 kvitnya 2022 peps python org Arhiv originalu za 4 kvitnya 2022 Procitovano 4 kvitnya 2022 dotnet bot docs microsoft com en us Arhiv originalu za 4 kvitnya 2022 Procitovano 1 listopada 2019 BillWagner docs microsoft com en us Arhiv originalu za 28 sichnya 2021 Procitovano 1 listopada 2019 www sqlite org Arhiv originalu za 8 kvitnya 2022 Procitovano 4 kvitnya 2022 Pribyl Bill vid 6 O Reilly Media Inc ISBN 9781449324414 Arhiv originalu za 4 kvitnya 2022 Procitovano 16 chervnya 2016 PL SQL has a PRAGMA keyword with the following syntax PRAGMA instruction to compiler PL SQL offers several pragmas PosilannyaVebsajt OpenMP 20 lipnya 2008 u Wayback Machine Vebsajt OpenACC 15 chervnya 2012 u Wayback Machine