No, NON è possibile!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 ...
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
ed includere il file corrispondente, piuttosto che copia/incollarselo negli *.c che ne abbisognano.codice:// pippo.h extern int gVariable; // dichiarazione (NON definizione) di una variabile globale definita altrove in un *.c
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.