Mis on tingimuslik koostamine?

Arvutiprogrammeerimises kirjeldab tingimuslik kompileerimine tarkvarakompilaatori või lähtekoodiprotsessori võimet lisada või ignoreerida teatud käske või koodiplokke, mis põhinevad keelespetsiifilistel käskudel, mis ei ole tehniliselt osa programmeerimiskeele põhispetsifikatsioonist. Käske, mida kasutatakse programmis tingimusliku kompileerimise käivitamiseks, nimetatakse sageli eelprotsessori direktiivideks, kuigi neid võib nimetada ka kompilaatori direktiivideks, tingimuslikeks kommentaarideks või tingimuslikeks definitsioonideks. Olenevalt kasutatavast kompilaatorist või keelest võivad tingimuslikud direktiivid olla kasutaja määratud muutujad või makrod või need võivad olla ka kompilaatori või operatsioonisüsteemi seatud süsteemimuutujad. Tingimuslikku kompileerimist kasutatakse sageli ühe lähtekoodifailide komplekti konfigureerimiseks, nii et neid saab kompileerida erinevates keskkondades või operatsioonisüsteemides ilma lähtefaile vahetamata või muutmata.

Tingimusliku kompileerimise testimiseks kasutatavad tingimuslikud määratlused võivad erinevates keeltes erineda, kuid üldiselt on need makrod või muud metaandmete avaldised, mis jäävad väljapoole tavaliste programmimuutujate ulatust. Sellistes keeltes nagu C on muutujateks tavaliselt makrod, mida loeb eelprotsessor. Enamasti ei ole makrodele juurdepääs tegeliku käivitatava programmi lähtekoodiga, kuigi need on olemas samades lähtefailides.

Määratletud tingimuslike muutujate testimiseks kasutatavad direktiivid on algelised ja järgivad sama loogikat kui kui-siis-lause. Tingimusliku kompileerimise põhitestid on see, kas väärtus on määratletud, määratlemata või mõnel juhul kas kaks määratletud muutujat on samaväärsed. Muutujatel või makrodel endil ei ole üldiselt mingit tähtsust, sest nende määratlemine on see, mida juhised kontrollivad. Mõne keele ja kompilaatori puhul võib aga määratletud muutuja väärtus olla oluline, kui neid hinnatakse Boole’i ​​oleku jaoks.

Kui kompilaator kohtab tingimuslikuks kompileerimiseks kasutatavaid direktiive, hinnatakse direktiive, et näha, kas need on tõesed või väärad. Kui see on tõene, kompileeritakse käskkirjale järgnev kood tavapäraselt; vastasel juhul jätab kompilaator direktiivis sisalduva koodi täielikult vahele. See erineb tingimuslike loogikalausetest käivitatavas programmikoodis endas, sest isegi kui loogikal on koodiplokk, mida ei saa käivitada, tõlgendatakse ja kompileeritakse see enamikul juhtudel ikkagi. Tingimuslike eelprotsessori käskkirjade puhul ei kaasata, ei tõlgendata ega kompileerita kunagi vahelejäetud koodi. Samuti tuleb märkida, et kui eelprotsessor on kõik tingimuslikud muutujad ja direktiivid hinnanud, ei kompileerita neid ülejäänud programmiga, kuna need on mõeldud ainult kompilaatorile suuna andmiseks.

Tingimuslikku kompileerimist kasutatakse enamasti konkreetsele operatsioonisüsteemile või keskkonnale omase koodi lisamiseks või välistamiseks. See tähendab, et ühes operatsioonisüsteemis olevaid teeke saab tingimuslikult kaasata, kui direktiivid määravad, et programm kompileeritakse selle operatsioonisüsteemi alusel. Alternatiivina saab direktiive kasutada ka kasutaja määratud muutujatel põhineva koodi kaasamiseks või välistamiseks. Seda saab teha nii, et silumis- või profileerimiskood ei sisaldu programmi lõplikus versioonis, vastasel juhul saab teatud funktsioone lubada või keelata, ilma et peaksite koodist eraldi koopiaid säilitama.