Wat is voorwaardelijke compilatie?

In computerprogrammering beschrijft voorwaardelijke compilatie het vermogen van een softwarecompiler of broncodeprocessor om bepaalde opdrachten of codeblokken op te nemen of te negeren op basis van taalspecifieke instructies die technisch geen deel uitmaken van de kernspecificatie van de programmeertaal. De opdrachten die worden gebruikt om voorwaardelijke compilatie in een programma te activeren, worden vaak pre-processorrichtlijnen genoemd, hoewel ze ook wel compilerrichtlijnen, voorwaardelijke opmerkingen of voorwaardelijke definities kunnen worden genoemd. Afhankelijk van de compiler of de taal die wordt gebruikt, kunnen de voorwaardelijke richtlijnen door de gebruiker gedefinieerde variabelen of macro's zijn, of het kunnen ook systeemvariabelen zijn die zijn ingesteld door de compiler of het besturingssysteem. Voorwaardelijke compilatie wordt vaak gebruikt om een ​​enkele set broncodebestanden te configureren, zodat deze onder verschillende omgevingen of besturingssystemen kunnen worden gecompileerd zonder bronbestanden te moeten verwisselen of wijzigen.

De voorwaardelijke definities die worden gebruikt om voorwaardelijke compilatie te testen, kunnen van taal tot taal verschillen, maar meestal zijn het macro's of andere metagegevensuitdrukkingen die buiten het bereik van de normale programmavariabelen vallen. In talen zoals C zijn de variabelen meestal macro's die door een pre-processor worden gelezen. Meestal zijn de macro's niet toegankelijk via de broncode van het uitvoerbare programma, ook al bestaan ​​ze in dezelfde bronbestanden.

De richtlijnen die worden gebruikt om de gedefinieerde voorwaardelijke variabelen te testen, zijn rudimentair en volgen dezelfde logica als een if-then-instructie. De basistests die kunnen worden uitgevoerd voor voorwaardelijke compilatie zijn of een waarde is gedefinieerd, niet is gedefinieerd of, in sommige gevallen, of twee gedefinieerde variabelen equivalent zijn. De variabelen of macro's zelf hebben over het algemeen geen enkele waarde van betekenis, omdat het bepalen van de variabelen dat is wat de richtlijnen controleren. Bij sommige talen en compilers kan de waarde van een gedefinieerde variabele echter van belang zijn als deze worden geëvalueerd voor de Booleaanse staat.

Wanneer een compiler richtlijnen tegenkomt die worden gebruikt voor voorwaardelijke compilatie, worden de richtlijnen geëvalueerd om te zien of ze als waar of onwaar testen. Indien waar, wordt de code die volgt op de richtlijn als normaal gecompileerd; anders slaat de compiler de code onder de richtlijn volledig over. Dit is anders dan voorwaardelijke logische instructies in de uitvoerbare programmacode zelf, omdat, zelfs als de logica een codeblok heeft dat niet kan worden uitgevoerd, het in de meeste gevallen nog steeds zal worden geïnterpreteerd en gecompileerd. Met voorwaardelijke pre-processor richtlijnen wordt overgeslagen code nooit opgenomen, geïnterpreteerd of gecompileerd. Er moet ook worden opgemerkt dat zodra de voorprocessor alle voorwaardelijke variabelen en richtlijnen heeft geëvalueerd, deze niet zijn gecompileerd met de rest van het programma, omdat ze alleen zijn bedoeld om richting te geven aan de compiler.

Voorwaardelijke compilatie wordt meestal gebruikt om code op te nemen of uit te sluiten die specifiek is voor een bepaald besturingssysteem of omgeving. Dit betekent dat bibliotheken die in één besturingssysteem bestaan, voorwaardelijk kunnen worden opgenomen als de richtlijnen bepalen dat het programma onder dat besturingssysteem wordt gecompileerd. Als alternatief kunnen de richtlijnen ook worden gebruikt om code op te nemen of uit te sluiten op basis van door de gebruiker gedefinieerde variabelen. Dit kan worden gedaan zodat foutopsporings- of profileringscode niet is opgenomen in de definitieve versie van een programma, of zodat bepaalde functies kunnen worden in- of uitgeschakeld zonder afzonderlijke kopieën van de code te hoeven onderhouden.

ANDERE TALEN

heeft dit artikel jou geholpen? bedankt voor de feedback bedankt voor de feedback

Hoe kunnen we helpen? Hoe kunnen we helpen?