#ifdef ( linguaggio C )
Nel linguaggio C la direttiva #ifdef ( o #if defined ) verifica se un identificativo è già stato definito con la direttiva #define. È una direttiva di preprocessione del codice sorgente.
La sintassi di #ifdef
#ifdef [simbolo]
blocco
#endif
Se il simbolo è definito, il preprocessore considera il blocco di codice compreso tra #ifdef e #endif.
Viceversa, lo esclude dalla compilazione.
Esempi pratici
Esempio 1
Nel seguente codice sorgente la direttiva #ifdef verifica se l'identificativo VERS è definito.
- #include <stdio.h>
- #define VERS 5
- int main() {
- printf("A");
- #ifdef VERS
- printf("B");
- #endif
- }
In questo caso, il simbolo è stato definito nella riga 2 tramite la direttiva #define.
Quindi, il processore aggiunge la linea 6 del codice.
Il codice sorgente del programma è il seguente:
- int main() {
- printf("A");
- printf("B");
- }
Il compilatore compila il codice sorgente precedente creando l'oggetto eseguibile del programma.
Esempio 2
In questo caso il simbolo VERS non è definito.
- #include <stdio.h>
- int main() {
- printf("A");
- #ifdef VERS
- printf("B");
- #endif
- }
Pertanto, il preprocessore elimina del tutto la riga di codice compresa tra #ifdef e #endif, ossia la riga 5.
Ora il codice sorgente del programma è il segnete.
- int main() {
- printf("A");
- }
Il precedente codice sorgente viene compilato dal compilatore.
Nota. Il compilatore non elabora la riga 5 del codice sorgente del programma, perché il preprocessore la elimina nella fase immediatamente precedente alla compilazione.
Esempio 3 ( include condizionato )
Il preprocessore verifica quale simbolo è definito ( WINDOWS o LINUX ).
- #ifdef WINDOWS
- #include "windows.h"
- #endif
- #ifdef LINUX
- #include "windows.h"
- #endif
- int main() {
- ...
- }
In questo modo, il preprocessore richiama il file header corretto tramite la direttiva #include.
Nota. Nelle direttive #include il nome del file è tra virgolette "" perché si tratta di un file esterno situato nella stessa directory del codice sorgente del programma. Viceversa, quando il nome del file è tra i simboli < > ( es. <stdio.h> ) è un file situato nella directory di sistema.