Hvad er betinget udarbejdelse?
Ved computerprogrammering beskriver betinget kompilering muligheden for en softwarecompiler eller kildekodeprocessor til at inkludere eller ignorere bestemte kommandoer eller blokke med kode baseret på sprogspecifikke instruktioner, der ikke teknisk er en del af kerneprogrammeringssprogspecifikationen. De kommandoer, der bruges til at udløse betinget kompilering i et program, kaldes ofte pre-processor-direktiver, selvom de også kan være kendt som compiler-direktiver, betingede kommentarer eller betingede definerer. Afhængigt af den kompilator eller det sprog, der bruges, kan de betingede direktiver være brugerdefinerede variabler eller makroer, eller de kan også være systemvariabler, der er indstillet af kompilatoren eller operativsystemet. Betinget kompilering bruges ofte til at konfigurere et enkelt sæt kildekodefiler, så de kan kompileres under forskellige miljøer eller operativsystemer uden at skulle bytte eller ændre kildefiler.
De betingede defineringer, der bruges til at teste for betinget kompilering, kan variere fra et sprog til et andet, men de er generelt makroer eller andre metadataudtryk uden for omfanget af de normale programvariabler. På sprog som C er variablerne normalt makroer, der læses af en forprocessor. Det meste af tiden er makroerne ikke tilgængelige med den faktiske eksekverbare programkildekode, selvom de findes i de samme kildefiler.
Direktiverne, der bruges til at teste de definerede betingede variabler, er rudimentære og følger den samme logik som en hvis-så-udsagn. De grundlæggende tests, der kan udføres med henblik på betinget kompilering, er, om en værdi er defineret, ikke defineret eller, i nogle tilfælde, om to definerede variabler er ækvivalente. Variablerne eller makroerne har generelt ikke nogen betydning af betydning, fordi det at definere dem er, hvad direktiverne tjekker efter. På nogle sprog og kompilatorer kan værdien af en defineret variabel dog have betydning, hvis de evalueres for den boolske tilstand.
Når en kompilator møder direktiver, der bruges til betinget udarbejdelse, evalueres direktiverne for at se, om de tester som sande eller falske. Hvis det er sandt, udarbejdes koden, der følger direktivet, som normalt; Ellers springer compileren helt over koden, der er indeholdt i direktivet. Dette er i modsætning til betingede logiske udsagn inden for selve den eksekverbare programkode, fordi selv om logikken har en kodeblok, der ikke kan udføres, vil den stadig blive fortolket og udarbejdet i de fleste tilfælde. Med betingede førprocessor-direktiver er spring-over-kode aldrig inkluderet, fortolket eller kompileret. Det skal også bemærkes, at når forprocessoren først har evalueret alle de betingede variabler og direktiver, kompileres de ikke med resten af programmet, fordi de kun er beregnet til at give retning til kompilatoren.
Betinget kompilering bruges ofte til at inkludere eller ekskludere kode, der er specifik for et bestemt operativsystem eller miljø. Dette betyder, at biblioteker, der findes i et operativsystem, kan inkluderes betinget, hvis direktiverne bestemmer, at programmet udarbejdes under det operativsystem. Alternativt kan direktiverne også bruges til at inkludere eller ekskludere kode baseret på brugerdefinerede variabler. Dette kan gøres, så fejlsøgning eller profileringskode ikke er inkluderet i den endelige version af et program, eller så visse funktioner kan aktiveres eller deaktiveres uden at skulle beholde separate kopier af koden.