Originariamente inviato da oregon
E' possibile se ha scritto

#ifndef _FILE_H_
#define _FILE_H_

...

#endif

in modo che il file venga considerato solamente una volta ...

Ma la dichiarazione di variabili negli include non e' proprio una cosa da farsi ...
No, NON è possibile!
Forse non hai seguito bene il thread: in tutto il thread si parla di definizione, non dichiarazione! Gli include servono proprio per condividere dichiarazioni compreso quindi le dichiarazioni delle variabili globali. Ad esempio è meglio infilare la seguente dichiarazione (NON definizione) in un file *.h
codice:
// pippo.h
extern int gVariable; // dichiarazione (NON definizione) di una variabile globale definita altrove in un *.c
ed includere il file corrispondente, piuttosto che copia/incollarselo negli *.c che ne abbisognano.
l'"ifndef" trick che hai mostrato serve per evitare inclusioni ricorsive, nella stessa unità di compilazione (leggi un *.c), NON in diverse unità di compilazione! Il preprocessore infatti lavora solo a livello di unità di compilazione, NON a livello di linker. E' il linker che ti stoppa se definisci due varibili globali, o funzioni globali, con lo stesso nome, NON il compilatore. Perciò le definizioni vanno negli *.c le dichiarazioni nei *h!
;-)
p.s: osserva che in pippo.h non ho usato l'ifndef trick (che va utilizzato sempre) proprio per enfatizzare che in questo caso, il rischio di inclusione ricorsiva, non c'entra nulla.