Che cos'è la compilazione condizionale?
Nella programmazione per computer, la compilazione condizionale descrive la capacità di un compilatore software o di un elaboratore di codice sorgente di includere o ignorare determinati comandi o blocchi di codice sulla base di istruzioni specifiche della lingua che non fanno tecnicamente parte delle specifiche del linguaggio di programmazione principale. I comandi utilizzati per attivare la compilazione condizionale in un programma sono spesso chiamati direttive pre-processore, sebbene possano anche essere note come direttive del compilatore, commenti condizionali o definizioni condizionali. A seconda del compilatore o della lingua utilizzata, le direttive condizionali possono essere variabili o macro definite dall'utente, oppure possono anche essere variabili di sistema impostate dal compilatore o dal sistema operativo. La compilazione condizionale viene spesso utilizzata per configurare un singolo set di file di codice sorgente in modo che possano essere compilati in ambienti o sistemi operativi diversi senza dover scambiare o modificare i file di origine.
La definizione condizionale utilizzata per verificare la compilazione condizionale può variare da una lingua all'altra, ma in genere sono macro o altre espressioni di metadati al di fuori dell'ambito delle normali variabili di programma. In linguaggi come C, le variabili di solito sono macro che vengono lette da un pre-processore. Il più delle volte, le macro non sono accessibili dall'effettivo codice sorgente del programma eseguibile, anche se esistono negli stessi file sorgente.
Le direttive utilizzate per testare le variabili condizionali definite sono rudimentali e seguono la stessa logica di un'istruzione if-then. I test di base che possono essere eseguiti per la compilazione condizionale sono se un valore è definito, non definito o, in alcuni casi, se due variabili definite sono equivalenti. Le variabili o le macro stesse generalmente non hanno alcun valore di significato, perché l'atto di definirle è ciò che le direttive stanno verificando. Con alcune lingue e compilatori, tuttavia, il valore di una variabile definita può importare se vengono valutati per lo stato booleano.
Quando un compilatore incontra le direttive utilizzate per la compilazione condizionale, le direttive vengono valutate per vedere se testano come vere o false. Se vero, il codice che segue la direttiva viene compilato normalmente; in caso contrario, il compilatore salterà completamente il codice contenuto nella direttiva. Ciò è diverso dalle istruzioni logiche condizionali all'interno del codice del programma eseguibile stesso perché, anche se la logica ha un blocco di codice che non può essere eseguito, nella maggior parte dei casi verrà comunque interpretata e compilata. Con le direttive condizionali pre-processore, il codice ignorato non viene mai incluso, interpretato o compilato. Va inoltre notato che una volta che il pre-processore ha valutato tutte le variabili condizionali e le direttive, queste non vengono compilate con il resto del programma, poiché hanno solo lo scopo di fornire indicazioni al compilatore.
La compilazione condizionale il più delle volte viene utilizzata per includere o escludere il codice specifico di un particolare sistema operativo o ambiente. Ciò significa che le librerie esistenti in un sistema operativo possono essere incluse in modo condizionale se le direttive stabiliscono che il programma è stato compilato con quel sistema operativo. In alternativa, le direttive possono anche essere utilizzate per includere o escludere il codice in base a variabili definite dall'utente. Questo può essere fatto in modo che il codice di debug o di profilazione non sia incluso nella versione finale di un programma, o quindi alcune funzionalità possono essere abilitate o disabilitate senza dover conservare copie separate del codice.