Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 44 di 47
  • livello principiante
Indice lezioni

Le Direttive condizionali

Le direttive condizionali: l'uso di if, ifdef, ifndef, elif, else, endif
Le direttive condizionali: l'uso di if, ifdef, ifndef, elif, else, endif
Link copiato negli appunti

Le direttive condizionali in C permettono di definire una serie di istruzioni che verranno compilate in determinate condizioni, questo tipo di direttive viene usato spesso per compilare il medesimo sorgente su diversi sistemi operativi (cambiando dei parametri che in Linux funzionano ed in Windows no, e viceversa); le direttive condizionali sono sei, ma non sono difficili da ricordare:

  • #if

    - Se il valore di ciò che sta a destra è zero (quindi FALSO) allora l'if non farà niente; se il valore è diverso da zero (trUE), allora si eseguirà il codice sotto l'if fino a che non si incontra un elif, un else o un endif.

  • #ifdef

    - Riferendosi all'identificatore passato come parametro, se è già stato definito (trUE) si continua nell'esecuzione del codice sottostante, altrimenti (FALSE) si cerca un elif, un else o un endif.

  • #ifndef

    - Complementare al precedente; infatti in questo caso si esegue l'if solo se l'identificatore passato non è stato definito.

  • #elif

    - Corrisponde al costrutto del ELSE IF, e quindi verifica la propria condizione ed agisce di conseguenza; può essere usato per definire scelte multiple (tranne l'ultima).

  • #else

    - Nell'ultima voce delle scelte condizionali bisogna mettere l'else che copre la casistica non ricoperta dall'if e dagli elif precedenti. Tutto il codice che sta dopo l'else verrà eseguito fino a quando non si incontra un endif.

  • #endif

    - Chiude la direttiva #if e, corrisponde, nel linguaggio, alle famose parentesi graffe.

Di seguito facciamo un semplice esempio su come possiamo usare queste direttive per selezionare quale codice eseguire, cosa molto utile, lo ripetiamo, quando vogliamo compilare il medesimo programma su sistemi operativi diversi.

#include <stdio.h>
#include "miofile.h"

#ifndef SISTEMA
#define SISTEMA 1
#endif
// SISTEMA = 1 -> Sistema Linux;
// SISTEMA = 0 -> Sistema Windows;

main ()
{

#if SISTEMA==1
printf("Sistema operativo: Linuxn");
#elif SISTEMA==0
printf("Sistema operativo: Windowsn");
#else
printf("Sistema operativo: sconosciuton");
#endif

return 0;
}

 

In questo semplice pezzo di codice abbiamo due scenari, o l'identificatore SISTEMA è già stato definito, ad esempio, in miofile.h, con un valore che può assumere 0 (Windows), 1 (Linux), 2 (sconosciuto), oppure viene definito all'interno del codice con valore di default pari ad 1. A questo punto gli strumenti fino ad ora spiegati servono per stampare uno dei tre testi a seconda del valore assunto dall'identificatore SISTEMA. Il codice è volutamente un po' "forzato" per mostrare tutte le dichiarazioni condizionali citate. Si lascia al lettore il compito di fare ulteriori test per scoprire la potenza di questo strumento.

ESEMPIO PRATICO
(Visualizza il sorgente completo)
Ricalcando l'esempio sopra proposto, si può vedere come il pre-processore possa venir usato per impostare la stessa
funzione che ha un nome diverso in Linux e in Windows. Il comando è quello per "pulire lo schermo", con il pre-processore
assegniamo ad una variabile il valore giusto a seconda del sistema operativo in uso. La pulizia dello schermo avverrà con il
comando "system(pulisci);".

15      // SISTEMA = 1 -> Sistema Linux;
16      // SISTEMA = 0 -> Sistema Windows;
17      #ifndef SISTEMA
18      #define SISTEMA 1
19      #endif
20
21      // Scelgo la funzione di sistema per pulire lo schermo
22      #if SISTEMA==0
23        char* pulisci = "cls";
24      #elif SISTEMA==1
25        char* pulisci = "clear";
26      #endif
[...]
70          system(pulisci);

Ti consigliamo anche