Ho visto un codice come questo di solito all’inizio dei file di intestazione:
#ifndef HEADERFILE_H #define HEADERFILE_H
E alla fine del file è
#endif
Qual è lo scopo di questo?
Quelli sono chiamati #include guardie .
Una volta inclusa l’intestazione, controlla se un valore univoco (in questo caso HEADERFILE_H
) è definito. Quindi se non è definito, lo definisce e continua al resto della pagina.
Quando il codice è incluso di nuovo, il primo ifndef
fallisce, risultando in un file vuoto.
Ciò impedisce la doppia dichiarazione di qualsiasi identificatore come tipi, enumerazioni e variabili statiche.
#ifndef /* code */ #else /* code to include if the token is defined */ #endif
#ifndef
controlla se il token specificato è stato #defined
precedenza nel file o in un file incluso; in caso contrario, include il codice tra esso e la chiusura #else
o, se non è presente #else
, l’istruzione #endif
. #ifndef
viene spesso utilizzato per rendere idempotenti i file di intestazione definendo un token una volta che il file è stato incluso e controllando che il token non sia stato impostato nella parte superiore del file.
#ifndef _INCL_GUARD #define _INCL_GUARD #endif
Ciò impedisce l’inclusione multipla dello stesso file di intestazione più volte.
#ifndef __COMMON_H__ #define __COMMON_H__ //header file content #endif
Supponiamo di aver incluso questo file di intestazione in più file. Quindi, la prima volta che __COMMON_H__ non è definita, verrà definita e inclusa nel file di intestazione.
La prossima volta che __COMMON_H__ è definito, quindi non includerà di nuovo.