Che cos’è la compilazione condizionale?

Nella programmazione per computer, la compilazione condizionale descrive la capacità di un compilatore software o di un processore di codice sorgente di includere o ignorare determinati comandi o blocchi di codice basati su istruzioni specifiche del linguaggio che non fanno tecnicamente parte delle specifiche del linguaggio di programmazione di base. I comandi utilizzati per attivare la compilazione condizionale in un programma sono spesso chiamati direttive pre-processore, sebbene possano anche essere noti come direttive del compilatore, commenti condizionali o definizioni condizionali. A seconda del compilatore o del linguaggio utilizzato, 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.

Le definizioni condizionali utilizzate per verificare la compilazione condizionale possono variare da un linguaggio all’altro, ma generalmente sono macro o altre espressioni di metadati al di fuori dell’ambito delle normali variabili di programma. In linguaggi come il C, le variabili di solito sono macro che vengono lette da un preprocessore. La maggior parte delle volte, le macro non sono accessibili dal codice sorgente del programma eseguibile effettivo, 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 significatività, perché l’atto di definirle è ciò che le direttive stanno verificando. Con alcuni linguaggi e compilatori, tuttavia, il valore di una variabile definita può essere importante se vengono valutati per lo stato booleano.

Quando un compilatore incontra le direttive usate per la compilazione condizionale, le direttive vengono valutate per vedere se vengono verificate come vere o false. Se true, il codice che segue la direttiva viene compilato normalmente; in caso contrario, il compilatore ignorerà completamente il codice contenuto nella direttiva. Questo è 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, verrà comunque interpretato e compilato nella maggior parte dei casi. Con le direttive condizionali del preprocessore, 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, perché servono solo a fornire indicazioni al compilatore.

La compilazione condizionale viene spesso utilizzata per includere o escludere codice specifico di un particolare sistema operativo o ambiente. Ciò significa che le librerie che esistono in un sistema operativo possono essere incluse in modo condizionale se le direttive determinano che il programma viene compilato con quel sistema operativo. In alternativa, le direttive possono essere utilizzate anche per includere o escludere codice in base a variabili definite dall’utente. Questa operazione può essere eseguita in modo che il codice di debug o di profilatura non sia incluso nella versione finale di un programma o in modo che determinate funzioni possano essere abilitate o disabilitate senza dover mantenere copie separate del codice.