#if ( linguaggio C )
Nel linguaggio C la direttiva #if #endif è usata nella preprocessione del codice sorgente come condizione di controllo.
Sintassi
#if [espressione]
codice
#endif
Se l'espressione condizionale è vera, il preprocessore scrive il blocco di codice contenuto tra #if e #endif. Viceversa, lo esclude.
Esempio
La direttiva #define definisce un identificatore #VERS.
La seconda verifica se VERSIONE è minore di 5.
- #include <stdio.h>
- int main() {
- printf("controllo versione");
- #if (VERS<5)
- printf("versione non aggiornata");
- #endif
- }
Se minore di 5, il preprocessore aggiunge al codice sorgente la stampa del messaggio "versione non aggiornata".
- int main() {
- printf("controllo versione");
- printf("versione non aggiornata");
- }
Se uguale o maggiore di 5, il preprocessore salta alla direttiva #endif senza aggiungere nulla.
- int main() {
- printf("controllo versione");
- }
Dopo la preprocessione il codice sorgente viene compilato dal compilatore per creare l'oggetto eseguibile.
Attenzione. Le istruzioni condizionali #if nella preprocessione non vanno confuse con le strutture condizionali if del programma. Il preprocessore è elaborato prima della compilazione per modificare il codice sorgente del programma. Le istruzioni if else del programma, invece, sono elaborate durate l'esecuzione del programma compilato.
La clausola #elif
Nella preprocessione la clausola #elif aggiunge delle espressioni condizionali alla struttura di controllo.
#if (espressione1)
blocco1
#elif (espressione2)
blocco2
#elif (espressione3)
blocco3
#endif
La condizione 2 è verificata soltanto se l'espressione 1 è falsa.
La condizione 3 è verificata soltanto se le espressioni 1 e 2 sono false.
Nota. Non c'è limite al numero delle componenti #elif in una struttura condizionale.
La clausola #else
Nella preprocessione la clausola #else è il blocco di codice alternativo alla struttura #if.
Si attiva soltanto se le altre condizioni di controllo sono false.
#if (espressione1)
blocco1
#elif (espressione2)
blocco2
#elif (espressione3)
blocco3
#else
blocco4
#endif
Nel codice precedente il blocco 4 è elaborato soltanto se le espressioni 1, 2 e 3 sono false.
Esempi pratici
Alcuni esempi pratici della direttiva #if
Esempio 1
La struttura di controllo verifica il valore assegnato all'identificativo VERS.
- #include <stdio.h>
- int main() {
- printf("controllo versione");
- #if VERS<5
- printf("versione non aggiornata");
- #elif VERS == 5
- printf("versione 5.0");
- #elif VERS == 6
- printf("versione 6.0");
- #else
- printf("versione non riconosciuta");
- #endif
- }
Il valore di VERS è precedentemente assegnato tramite la direttiva #define del preprocessore.
Se VERS è minore di 5, il preprocessore invia al compilatore il seguente codice sorgente:
- int main() {
- printf("controllo versione");
- printf("versione non aggiornata");
- }
Se VERS è uguale a 5
- int main() {
- printf("controllo versione");
- printf("versione 5.0");
- }
Se VERS è uguale 6
- int main() {
- printf("controllo versione");
- printf("versione 6.0");
- }
Infine, se nessuna condizione si verifica, il preprocessore invia al compilatore il codice:
- int main() {
- printf("controllo versione");
- printf("versione non riconosciuta");
- }