Directiva (programare) - Directive (programming)

În programarea computerizată , o directivă sau o pragmă (din „pragmatică”) este o construcție de limbaj care specifică modul în care un compilator (sau alt traducător ) ar trebui să-și proceseze intrarea. Directivele nu fac parte din gramatica unui limbaj de programare și pot varia de la un compilator la altul. Acestea pot fi procesate de un preprocesator pentru a specifica comportamentul compilatorului sau pot funcționa ca o formă de parametrizare în bandă .

În unele cazuri, directivele specifică comportamentul global, în timp ce în alte cazuri afectează doar o secțiune locală, cum ar fi un bloc de cod de programare. În unele cazuri, cum ar fi unele programe C, directivele sunt sugestii opționale ale compilatorului și pot fi ignorate, dar în mod normal sunt prescriptive și trebuie respectate. Cu toate acestea, o directivă nu efectuează nicio acțiune în limbajul în sine, ci mai degrabă doar o schimbare în comportamentul compilatorului.

Acest termen ar putea fi folosit pentru a se referi la etichete și comenzi (sau markup) terțe proprietare încorporate în cod care au ca rezultat o procesare executabilă suplimentară care extinde compilatorul existent, ansamblul și construcțiile de limbaj prezente în mediul de dezvoltare. Termenul „directivă” se aplică, de asemenea, într-o varietate de moduri similare termenului de comandă .

Preprocesorul C.

În C și C ++ , limbajul acceptă un preprocesor macro simplu . Liniile sursă care ar trebui tratate de preprocesor, cum ar fi și sunt denumite directive preprocesor . #define#include

O altă construcție C, #pragma directiva, este utilizată pentru a instrui compilatorul să utilizeze caracteristici pragmatice sau dependente de implementare. Doi utilizatori notabili ai acestei directive sunt OpenMP și OpenACC .

Constructe sintactice similare cu directivele preprocesor C, cum ar fi C # „s #if , sunt , de asemenea , numite în mod obișnuit«directive», cu toate că , în aceste cazuri , nu poate exista nici o fază de preprocesare reale implicate.

Toate comenzile preprocesatorului încep cu un simbol hash (#).

Istorie

Directivele datează de la ALGOL 68 , unde sunt cunoscute sub numele de pragmatice (de la „pragmatică”) și denotate pragmatică sau pr ; în limbi mai noi, în special C, aceasta a fost abreviată în „pragma” (nu „t”).

O utilizare obișnuită a pragmats în Algol 68 este în care indică un redresare regim, ceea ce înseamnă „modul în care sunt indicate cuvinte cheie“. Urmează diverse astfel de directive, care specifică regimurile POINT, UPPER, RES (rezervat) sau de cotare. Rețineți utilizarea stropping pentru cuvântul cheie pragmatică în sine (prescurtat pr ), fie în regimurile POINT, fie în citate:

.PR POINT .PR
.PR UPPER .PR
.PR RES .PR
'pr' quote 'pr'

Astăzi, directivele sunt cele mai cunoscute în limbajul C, de la începutul anilor 1970, și continuă prin actualul standard C99 , unde sunt fie instrucțiuni către preprocesorul C , fie, sub formă de #pragma directive către compilatorul însuși. De asemenea, ele sunt utilizate într-o oarecare măsură în limbi mai moderne; Vezi mai jos.

Alte limbi

  • În Ada , directivele de compilare sunt numite pragme (prescurtarea pentru „informații pragmatice”).
  • În Common Lisp , directivele se numesc declarații și sunt specificate folosind declare constructul (de asemenea proclaim sau declaim ). Cu o singură excepție, declarațiile sunt opționale și nu afectează semantica programului. Singura excepție este special , care trebuie specificată acolo unde este cazul.
  • În Turbo Pascal , directivele sunt numite comentarii semnificative , deoarece în gramatica limbii urmează aceeași sintaxă ca și comentariile . În Turbo Pascal, un comentariu semnificativ este un comentariu al cărui prim caracter este un semn de dolar și al cărui al doilea caracter este o literă; de exemplu, echivalentul #include "file" directivei C's este comentariul semnificativ {$I "file"} .
  • În Perl , cuvântul cheie " use ", care importă module, poate fi, de asemenea, utilizat pentru a specifica directive, cum ar fi use strict; sau use utf8; .
  • Pragmele Haskell sunt specificate folosind o sintaxă specializată de comentarii, de ex {-# INLINE foo #-} .
  • Python are două directive - from __future__ import feature (definite în PEP 236 - Înapoi la __future__ ), care schimbă caracteristicile de limbă (și folosește sintaxa de import a modulului existent, ca în Perl) și coding directiva (într-un comentariu) pentru a specifica codificarea unui fișier cod sursă (definit în PEP 263 - Definirea codificărilor codului sursă Python ). O declarație directivă mai generală a fost propusă și respinsă în PEP 244 - Declarația „directivă” ; toate acestea datează din 2001.
  • ECMAScript adoptă, de asemenea, use sintaxa directivelor, cu diferența că pragmele sunt declarate ca literele șirului (de exemplu "use strict"; , sau "use asm"; ), mai degrabă decât un apel funcțional.
  • În Visual Basic , cuvântul cheie " Option " este utilizat pentru directive:
    • Option Explicit On|Off - Când este activat, nu este permisă declararea implicită a variabilelor la prima utilizare care necesită o declarație explicită în prealabil.
    • Option Compare Binary - Rezultă în comparații de șiruri bazate pe o ordine de sortare derivată din reprezentările binare interne ale caracterelor - de ex. Pentru pagina de cod engleză / europeană (ANSI 1252) A <B <E <Z <a <b <e <z <À < Ê <Ø <à <ê <ø. Afectează operatorii intrinseci (de ex. =, <>, <,>), Blocul Select Case și funcțiile șirului de bibliotecă Runtime VB (de exemplu, InStr).
    • Option Compare Text - Rezultă în comparații de șiruri bazate pe o ordine de sortare a textului care nu face sensibilitate la majuscule, determinată de localizarea sistemului dvs. - de ex. Pentru pagina de cod engleză / europeană (ANSI 1252) (A = a) <(À = à) <(B = b) < (E = e) <(Ê = ê) <(Z = z) <(Ø = ø). Afectează operatorii intrinseci (de ex. =, <>, <,>), Blocul Select Case și funcțiile șirului de bibliotecă Runtime VB (de exemplu, InStr).
    • Option Strict On|Off - Când este interzisă:
      • programare fără tip - unde declarațiile care nu au un tip explicit sunt implicit tastate ca obiect.
      • legare tardivă (adică expediere dinamică către obiecte CLR, DLR și COM) pe valori tipizate static ca obiect.
      • conversiile de îngustare implicită - care necesită toate conversiile la tipuri mai restrânse (de exemplu, de la lung la întreg, obiect la șir, control la TextBox) să fie explicite în cod folosind operatori de conversie (de exemplu, CInt, DirectCast, CType).
    • Option Infer On|Off - Când este activat, compilatorul poate deduce tipul variabilelor locale din inițializatoarele lor.
  • În Ruby , directivele de interpretare sunt denumite pragme și sunt specificate prin comentarii de top care urmează o key: value notație. De exemplu, coding: UTF-8 indică faptul că fișierul este codat prin codarea caracterelor UTF-8 .
  • În C # , directivele de compilare sunt numite directive de pre-procesare. Există o serie de directive de compilare diferite, inclusiv #pragma, care este utilizată în mod special pentru a controla avertismentele de compilare și sumele de verificare ale depanatorului.
  • SQLite SGBD include o directivă PRAGMA , care este folosită pentru a introduce comenzi care nu sunt compatibile cu alte SGBD.

limbaj de asamblare

  • În limbajul asamblării , directivele, denumite și pseudo-operații sau „pseudo-op-uri”, specifică în general informații precum mașina țintă, marchează separările între secțiunile de cod, invocă macrocomenzi, definesc zone de memorie rezervate etc. Asamblatorii folosesc o sintaxă specifică pentru a diferenția pseudo-op-urile de instrucțiunile mnemonice, cum ar fi prefațarea pseudo-op-ului cu un punct, cum ar fi pseudo-op-ul .END , care ar putea direcționa ansamblorul să oprească asamblarea codului.

PL / SQL

Vezi si

Referințe

linkuri externe