Mikä on ehdollinen kokoaminen?

Tietokoneohjelmoinnissa ehdollinen kääntäminen kuvaa ohjelmistokääntäjän tai lähdekoodiprosessorin kykyä sisällyttää tai sivuuttaa tiettyjä komentoja tai koodilohkoja, jotka perustuvat kielikohtaisiin ohjeisiin, jotka eivät teknisesti kuulu ohjelmointikielen ytimeen. Komentoja, joita käytetään ehdollisen kääntämisen käynnistämiseen ohjelmassa, kutsutaan usein esisuorittimen direktiiveiksi, vaikka niitä voidaan kutsua myös kääntäjädirektiiveiksi, ehdollisiksi kommentteiksi tai ehdollisiksi määritelmiksi. Käytettävästä kääntäjästä tai kielestä riippuen ehdolliset direktiivit voivat olla käyttäjän määrittämiä muuttujia tai makroja tai ne voivat olla myös kääntäjän tai käyttöjärjestelmän asettamia järjestelmämuuttujia. Ehdollista kääntämistä käytetään usein yksittäisten lähdekooditiedostojen määrittämiseen, jotta ne voidaan koota eri ympäristöissä tai käyttöjärjestelmissä ilman, että lähdetiedostoja on vaihdettava tai vaihdettava.

Ehdolliset määritykset, joita käytetään ehdollisen kääntämisen testaamiseen, voivat vaihdella kielistä toiseen, mutta ne ovat yleensä makroja tai muita metadatan lausekkeita, jotka eivät kuulu normaalien ohjelmamuuttujien soveltamisalaan. C: n kaltaisilla kielillä muuttujat ovat yleensä makroja, jotka esikäsittelijä lukee. Suurimpaan osaan ajasta makroihin ei pääse käsiksi suoritettavan ohjelman lähdekoodilla, vaikka ne ovat samoissa lähdetiedostoissa.

Direktiivit, joita käytetään määritettyjen ehdollisten muuttujien testaamiseen, ovat alkeellisia ja noudattavat samaa logiikkaa kuin if-then-lause. Perustestit, jotka voidaan suorittaa ehdolliselle kokoamiselle, ovat, onko arvo määritelty, määrittelemätön tai joissakin tapauksissa, ovatko kaksi määritettyä muuttujaa vastaavat. Muuttujilla tai makroilla ei yleensä ole mitään merkittävää arvoa, koska direktiivit tarkistavat niiden määrittelyn. Joillakin kielillä ja kääntäjillä määritetyn muuttujan arvolla voi kuitenkin olla merkitystä, jos ne arvioidaan Boolen tilassa.

Kun kääntäjä kohtaa ehdollisessa kääntämisessä käytetyt direktiivit, direktiivit arvioidaan sen perusteella, testataanko ne oikeiksi vai vääriksi. Jos tämä on totta, direktiiviä seuraava koodi kootaan normaalisti; muussa tapauksessa kääntäjä ohittaa kokonaan direktiivin sisältämän koodin. Tämä on toisin kuin itse suoritettavan ohjelmakoodin ehdolliset logiikkalausunnot, koska vaikka logiikalla olisi koodilohko, jota ei voida suorittaa, se tulkitaan ja käännetään useimmissa tapauksissa. Ehdollisilla esiprosessorin ohjeilla ohitettua koodia ei koskaan sisällytetä, tulkita tai käännetä. On myös huomattava, että kun esiprosessori on arvioinut kaikki ehdolliset muuttujat ja direktiivit, niitä ei koota muun ohjelman kanssa, koska niiden tarkoituksena on vain antaa suuntaa kääntäjälle.

Ehdollista kääntämistä käytetään useimmiten tiettyyn käyttöjärjestelmään tai ympäristöön liittyvän koodin sisällyttämiseen tai poissulkemiseen. Tämä tarkoittaa, että yhdessä käyttöjärjestelmässä olevat kirjastot voidaan sisällyttää ehdollisesti, jos direktiivit määrittävät, että ohjelma kootaan kyseisen käyttöjärjestelmän alla. Vaihtoehtoisesti direktiiveillä voidaan myös sisällyttää tai sulkea pois koodi käyttäjän määrittämien muuttujien perusteella. Tämä voidaan tehdä niin, että virheenkorjaus- tai profilointikoodi ei sisälly ohjelman lopulliseen versioon, tai niin, että tietyt ominaisuudet voidaan ottaa käyttöön tai poistaa käytöstä ilman erillisten kopioiden ylläpitämistä.