Hva er betinget sammenstilling?
Ved programmering av datamaskiner beskriver betinget kompilering muligheten til en programvarekomstator eller kildekodeprosessor til å inkludere eller ignorere visse kommandoer eller blokker med kode basert på språkspesifikke instruksjoner som ikke er teknisk del av kjerneprogrammeringsspråkspesifikasjonen. Kommandoene som brukes til å utløse betinget kompilering i et program, kalles ofte forprosessordirektiver, selv om de også kan kalles kompilatordirektiver, betingede kommentarer eller betingede definisjoner. Avhengig av kompilatoren eller språket som brukes, kan de betingede direktivene være brukerdefinerte variabler eller makroer, eller de kan også være systemvariabler satt av kompilatoren eller operativsystemet. Betinget kompilering brukes ofte til å konfigurere et enkelt sett kildekodefiler slik at de kan settes sammen under forskjellige miljøer eller operativsystemer uten å måtte bytte eller endre kildefiler.
De betingede definisjonene som brukes til å teste for betinget kompilering, kan variere fra språk til språk, men de er vanligvis makroer eller andre metadatauttrykk utenfor omfanget av de normale programvariablene. På språk som C er variablene vanligvis makroer som leses av en forprosessor. Det meste av tiden er makroene ikke tilgjengelige med faktisk kjørbar programkildekode, selv om de finnes i de samme kildefilene.
Direktivene som brukes til å teste de definerte betingede variablene er rudimentære og følger den samme logikken som et if-then utsagn. De grunnleggende testene som kan utføres for betinget kompilering er om en verdi er definert, ikke definert eller, i noen tilfeller, om to definerte variabler er ekvivalente. Variablene eller makroene har generelt ingen verdi av betydning, fordi det å definere dem er det direktivene ser etter. Med noen språk og kompilatorer kan verdien av en definert variabel imidlertid ha betydning hvis de blir evaluert for den boolske tilstanden.
Når en kompilator møter møter som brukes til betinget sammenstilling, blir direktivene evaluert for å se om de tester som sanne eller usanne. Hvis sant, blir koden som følger direktivet satt sammen som normalt; Ellers hopper kompilatoren fullstendig over koden som finnes i direktivet. Dette er i motsetning til betingede logiske utsagn i selve den kjørbare programkoden, selv om logikken har en kodeblokk som ikke kan kjøres, vil den fremdeles bli tolket og kompilert i de fleste tilfeller. Med betingede pre-prosessor-direktiver, blir overhoppet kode aldri inkludert, tolket eller sammenstilt. Det skal også bemerkes at når forprosessoren har evaluert alle betingede variabler og direktiver, blir de ikke sammenstilt med resten av programmet, fordi de bare er ment å gi retning til kompilatoren.
Betinget sammenstilling brukes ofte til å inkludere eller ekskludere kode som er spesifikk for et bestemt operativsystem eller miljø. Dette betyr at biblioteker som finnes i ett operativsystem, kan være betinget av om direktivene bestemmer at programmet blir satt sammen under det operativsystemet. Alternativt kan direktivene også brukes til å inkludere eller ekskludere kode basert på brukerdefinerte variabler. Dette kan gjøres slik at feilsøking eller profileringskode ikke er inkludert i den endelige versjonen av et program, eller slik at visse funksjoner kan aktiveres eller deaktiveres uten å beholde separate kopier av koden.