PDA

Visualizza la versione completa : [C] Variabili globali in un progetto


Gauss92
31-08-2012, 13:36
Ciao a tutti !
Ho un dubbio sulla dichiarazione delle variabili globali in un progetto. In pratica ho aperto un progetto contenente due file.c, il main e list.c e un header per le liste. Per questo programma devo usare una sola lista globale, ho provato ad inserire la lista nel main.c dichiarandola come TList list; ma nel file list.c quando uso tale lista mi dice lista non dichiarata. Come devo fare per dichiarare una lista visibile a tutti i file ?

torn24
31-08-2012, 16:35
Dichiari la lista all'interno di un file header , e includi l' header in tutti i moduli , file.
usa le virgolette se il file nella stessa cartella del progetto "mioheader.h" :)

MItaly
31-08-2012, 16:40
Chiarisco: la lista va definita in un solo .c, e dichiarata nel .h con una dichiarazione extern. Ad esempio avrai:
in main.h
extern TList list;
---
in main.c:
#include "main.h"
TList list;
...
in list.c
#include "main.h"

Gauss92
01-09-2012, 12:02
Originariamente inviato da MItaly
Chiarisco: la lista va definita in un solo .c, e dichiarata nel .h con una dichiarazione extern.

Scusa, non ho capito. In che senso "extern" ? e cosa intendi per definita e dichiarata ?

a quanto ho capito da torn24 dovrei solo scrivere "TList l;" in list.h e poi includere list.h nel main no ?

torn24
01-09-2012, 12:46
Se hai una risposta da Military , ti conviene seguire quella , non la mia , per molti motivi :biifu: :biifu:

Il file header , serve solo per non riscrivere le stesse cose , in ogni file .

extern Tipolista Mialista


questo lo potresti scrivere direttamente , nel secondo modulo ,file .

dici al compilatore , io uso la lista Mialista , ma guarda , non in questo file , cercala , negli
altri file , in questo caso la trova nel file main.c

Gauss92
01-09-2012, 14:03
Capito, quindi nel mio caso avr (i file sono main.c list.c list.h) :

in main.c
TList list;

in list.h
extern TList list;

in list.c
#include"list.h"

giusto ?

MItaly
01-09-2012, 15:34
Originariamente inviato da Gauss92
Capito, quindi nel mio caso avr (i file sono main.c list.c list.h) :

in main.c
TList list;

in list.h
extern TList list;

in list.c
#include"list.h"

giusto ?
In genere la dichiarazione extern la metti nel .h relativo al .c in cui definisci la variabile. L'idea che, se vuoi accedere a variabili "esportate" da main.c, ti basta includere main.h.

Gauss92
01-09-2012, 16:05
Il fatto che io non uso un main.h, di solito uso info.h e info.c per la dichiarazione dei dati e list.h list.c per le funzioni di gestione quindi il main.h non mi serve. In questo mio caso dovrei dichiarare la lista in list.c normalmente, poi come extern in list.h e infine includere il list.h nel main giusto ? anche se dichiarare la lista nel file list.c innaturale

MItaly
01-09-2012, 16:21
Puoi fare come ti pare, l'importante che alla fine la lista sia definita in un solo .c e dichiarata (con dichiarazione extern) l dove serve usarle. Quella che ti ho detto semplicemente la convenzione pi usata: ad ogni .c corrisponde un .h in cui sono dichiarate le funzioni e le variabili che si vogliono rendere visibili agli altri moduli; in questa maniera se ti serve usare una funzione/variabile di pippo.c sai che ti basta includere pippo.h.

Gauss92
01-09-2012, 17:40
quindi la dizhiarazione exter va fatta in ogni file dove intendo usare la lista !
era questo che non capivo, grazie mille a entrambe per le risposte ! :)

Loading