#ifndef ( linguaggio C )
Nel linguaggio C la direttiva #ifndef ( o #if !defined ) controlla se un simbolo è stato dichiarato con la direttiva #define in fase di preprocessione del codice. La direttiva è la contrazione di IF Not DEFine.
La sintassi di #ifnfef
#ifndef [simbolo]
blocco di istruzioni
#endif
Se il simbolo non è definito, il preprocessore aggiunge al codice il blocco di istruzioni tra #ifndef e #endif.
Viceversa, lo esclude.
Dopo la preprocessione il codice sorgente passa al compilatore, per essere compilato in un oggetto eseguibile.
Nota. La direttiva #ifndef è utile per verificare se un simbolo è già stato dichiarato ed evitare di dichiararlo più volte nello stesso codice sorgente.
Esempi pratici
Esempio 1
In questo esempio la direttiva #ifndef verifica se il simbolo VERS è definito.
Se non è definito lo definisce.
- int main()
- {
- #ifndef VERS
- #define VERS 2
- #endif
- }
In questo caso il simbolo VERS non è ancora definito.
Pertanto, la direttiva #ifndef nella linea 3 è vera.
Il preprocessore elabora la direttiva #define nella linea 4 e definisce il simbolo.
Esempio 2
In questo codice l'istruzione #ifndef verifica se il simbolo VERS non è stato definito.
- int main()
- {
- printf("A");
- #ifndef VERS
- printf("B");
- #endif
- }
In questo caso il simbolo VERS non è ancora definito.
Quindi la condizione #ifndef è vera e il preprocessore prepara il seguente codice sorgente.
- int main()
- {
- printf("A");
- printf("B");
- }
Esempio 3
Nell'esempio successivo il simbolo VERS è già stato dichiarato.
- int main()
- #define VERS 2
- {
- printf("A");
- #ifndef VERS
- printf("B");
- #endif
- }
Quindi, la condizione #ifndef è falsa.
Il codice sorgente del programma è il seguente:
- int main()
- {
- printf("A");
- }
In questo caso il preprocessore non ha aggiunto il blocco di istruzioni.
Nota. Il preprocessore prepara il codice sorgente alla compilazione. Non elabora le istruzioni in linguaggio C. Si limita a eliminare o aggiungere blocchi di istruzioni al programma, prima della compilazione.