Kaj je pogojna kompilacija?

V računalniškem programiranju pogojno prevajanje opisuje zmožnost prevajalnika programske opreme ali procesorja izvorne kode, da vključi ali prezre določene ukaze ali bloke kode na podlagi navodil, specifičnih za jezik, ki tehnično niso del specifikacije jedrnega programskega jezika. Ukazi, ki se uporabljajo za sprožitev pogojne kompilacije v programu, se pogosto imenujejo predprocesorske direktive, čeprav so lahko znane tudi kot direktive prevajalnika, pogojni komentarji ali pogojne definicije. Glede na uporabljeni prevajalnik ali jezik so lahko pogojne direktive uporabniško definirane spremenljivke ali makri ali pa so lahko tudi sistemske spremenljivke, ki jih nastavi prevajalnik ali operacijski sistem. Pogojno prevajanje se pogosto uporablja za konfiguriranje enega samega niza datotek izvorne kode, tako da jih je mogoče prevesti v različnih okoljih ali operacijskih sistemih, ne da bi morali zamenjati ali spreminjati izvorne datoteke.

Pogojne definicije, ki se uporabljajo za testiranje pogojnega prevajanja, se lahko razlikujejo od jezika do jezika, vendar so na splošno makri ali drugi izrazi metapodatkov izven obsega običajnih spremenljivk programa. V jezikih, kot je C, so spremenljivke običajno makri, ki jih bere predprocesor. Večino časa makri niso dostopni z dejansko izvedljivo izvorno kodo programa, čeprav obstajajo v istih izvornih datotekah.

Direktive, ki se uporabljajo za preizkušanje definiranih pogojnih spremenljivk, so rudimentarne in sledijo isti logiki kot stavek if-then. Osnovni testi, ki jih je mogoče izvesti za pogojno prevajanje, so, ali je vrednost definirana, ni definirana ali, v nekaterih primerih, ali sta dve definirani spremenljivki enakovredni. Same spremenljivke ali makri na splošno nimajo nobene vrednosti, ker direktive preverjajo dejanje njihovega definiranja. Pri nekaterih jezikih in prevajalnikih pa je lahko vrednost definirane spremenljivke pomembna, če se ovrednotijo ​​za Booleovo stanje.

Ko prevajalnik naleti na direktive, ki se uporabljajo za pogojno prevajanje, se direktive ovrednotijo, da se ugotovi, ali se preizkušajo kot resnične ali napačne. Če je res, se koda, ki sledi direktivi, prevede kot običajno; v nasprotnem primeru bo prevajalnik popolnoma preskočil kodo, ki jo vsebuje direktiva. To je za razliko od pogojnih logičnih stavkov v sami izvedljivi programski kodi, ker, tudi če ima logika blok kode, ki je ni mogoče izvesti, bo ta v večini primerov še vedno interpretiran in preveden. Pri pogojnih predprocesorskih direktivah preskočena koda ni nikoli vključena, interpretirana ali prevedena. Prav tako je treba opozoriti, da ko predprocesor ovrednoti vse pogojne spremenljivke in direktive, niso prevedene s preostalim delom programa, ker so namenjene samo usmerjanju prevajalnika.

Pogojno prevajanje se najpogosteje uporablja za vključitev ali izključitev kode, ki je specifična za določen operacijski sistem ali okolje. To pomeni, da se knjižnice, ki obstajajo v enem operacijskem sistemu, lahko pogojno vključijo, če direktive določajo, da se program prevaja pod tem operacijskim sistemom. Druga možnost je, da se direktive uporabljajo tudi za vključitev ali izključitev kode na podlagi uporabniško definiranih spremenljivk. To je mogoče storiti tako, da koda za odpravljanje napak ali profiliranje ni vključena v končno različico programa ali pa je mogoče nekatere funkcije omogočiti ali onemogočiti, ne da bi morali vzdrževati ločene kopije kode.