Ce este compilarea condiționată?

În programarea computerelor, compilarea condiționată descrie capacitatea unui compilator software sau a unui procesor de cod sursă de a include sau ignora anumite comenzi sau blocuri de cod bazate pe instrucțiuni specifice limbajului care nu fac parte din punct de vedere tehnic din specificația principală a limbajului de programare. Comenzile care sunt folosite pentru a declanșa compilarea condiționată într-un program sunt adesea numite directive pre-procesor, deși pot fi cunoscute și ca directive de compilator, comentarii condiționate sau definiții condiționale. În funcție de compilator sau limbajul utilizat, directivele condiționale pot fi variabile sau macro-uri definite de utilizator sau pot fi, de asemenea, variabile de sistem stabilite de compilator sau de sistemul de operare. Compilarea condiționată este frecvent utilizată pentru a configura un singur set de fișiere de cod sursă, astfel încât acestea să poată fi compilate în diferite medii sau sisteme de operare fără a fi nevoie să schimbați sau să schimbați fișierele sursă.

Definițiile condiționale care sunt folosite pentru a testa compilarea condiționată pot varia de la o limbă la alta, dar în general sunt macro-uri sau alte expresii de metadate în afara domeniului de aplicare al variabilelor normale ale programului. În limbaje precum C, variabilele sunt de obicei macrocomenzi care sunt citite de un pre-procesor. De cele mai multe ori, macrocomenzile nu sunt accesibile prin codul sursă efectiv al programului executabil, chiar dacă există în aceleași fișiere sursă.

Directivele care sunt folosite pentru a testa variabilele condiționale definite sunt rudimentare și urmează aceeași logică ca o instrucțiune dacă-atunci. Testele de bază care pot fi efectuate pentru compilarea condiționată sunt dacă o valoare este definită, nu este definită sau, în unele cazuri, dacă două variabile definite sunt echivalente. Variabilele sau macrourile în sine nu dețin, în general, nicio valoare de semnificație, deoarece actul de definire a acestora este ceea ce verifică directivele. Cu unele limbaje și compilatoare, totuși, valoarea unei variabile definite poate conta dacă acestea sunt evaluate pentru starea booleană.

Când un compilator întâlnește directive utilizate pentru compilarea condiționată, directivele sunt evaluate pentru a vedea dacă testează ca fiind adevărate sau false. Dacă este adevărat, codul care urmează directiva este compilat normal; în caz contrar, compilatorul va omite complet codul conținut în directivă. Acest lucru este spre deosebire de instrucțiunile logice condiționate din codul programului executabil în sine, deoarece, chiar dacă logica are un bloc de cod care nu poate fi executat, acesta va fi interpretat și compilat în majoritatea cazurilor. Cu directivele de pre-procesor condiționat, codul ignorat nu este niciodată inclus, interpretat sau compilat. De asemenea, trebuie remarcat faptul că, odată ce pre-procesorul a evaluat toate variabilele și directivele condiționate, acestea nu sunt compilate cu restul programului, deoarece sunt destinate doar să ofere direcție compilatorului.

Compilarea condiționată este folosită cel mai adesea pentru a include sau exclude cod care este specific unui anumit sistem de operare sau mediu. Aceasta înseamnă că bibliotecile care există într-un sistem de operare pot fi incluse condiționat dacă directivele determină că programul este compilat sub acel sistem de operare. În mod alternativ, directivele pot fi folosite și pentru a include sau exclude codul bazat pe variabile definite de utilizator. Acest lucru se poate face astfel încât codul de depanare sau de profilare să nu fie inclus în versiunea finală a unui program sau astfel încât anumite funcții să poată fi activate sau dezactivate fără a fi nevoie să păstrați copii separate ale codului.