Newsgroup: it.comp.lang.c
Titolo: Varibili extern

Ciao a tutti ! Ho letto precedenti post su questo argomento ma non ho
ben chiara una cosa.
Nel mio caso ho un file .h e 5 file .c . In ogni file .c ho incluso
l'header file ma ho bisogno di un paio di variabili che DEVONO essere
viste da tutti i file .c .
Leggendo vari post ho letto che devo dichiarare nell'  header file una
cosa del tipo:
extern int pippo;
ed in un file .c :
int pippo ;
Sperando che non stia dicendo una cretinata, nei restanti 4 file come
devo chiamare la variabile pippo?
Và usata direttamente , o all' inizio del file và ridichirata ? Per
piegarmi meglio, poniamo il caso che uno di questi 4 file si chiami
ciao.c , và scritta una cosa del genere ?
int pippo 
.. 
...
..
Oppure 
..
..
pippo =25 ;
..
..
Fatemi sapere...

Se la variabile è stata dichiarata extern in un header e viene
definita in un modulo, in un altro modulo la si può usare senza
dichiara la variabile come "extern" nell'header file del modulo nel
quale è definita, e da un altro modulo sarà possibile utilizzare la
stessa includendo semplicemente l'header. Per evitare doppie
dichiarazioni usa un trucchetto, ossia quello che consente di includere
una sola volta un determinato header file: all'inizio dell'header
"acca.h" puoi semplicemente scrivere:
#ifndef ACCA_H
#define ACCA_H
....resto dell'header....
#endif

Mi devi scusare ma non ho capito un gran chè. Ho già usato quel
trucchetto per non inludere due volte l'header, ma potresti farmi
vedere con un esempio come devo fare ?

 int pippo ;
Il risultato finale deve essere questo:
in UNO SOLO dei file deve comparire la dichiarazione "vera",
cioe'
int pippo;
e in tutti gli altri file deve comparire la dichiarazione
extern int pippo;
siccome la dichiarazione
extern int pippo;
puo' comparire senza problemi anche nel file dove c'e' poi la
int pippo;
per semplicita' quello che si fa di solito e'
1) inserire la dichiarazione extern in un header file
che verra' letto da tutti i file *.c. In questo modo
e' come se tu la inserissi manualmente in tutti i file *.c
2) inserire la dichiarazione "vera" senza extern,
in uno solo qualsiasi dei file *.c
ciao,
g.

Ok, perfetto ! Ora mi manca da sapere solo l'ultima cosa :
Metti il caso che in un file minny.c ho dichiarato int pippo, che a sua
volta è stata dichiarata extern in Header.h .
Ora ho 5 file che includono Header.h. La domanda è:come và richiamata
la variabile pippo?
Và usata direttamente , o all' inizio del file và ridichirata ? Per
piegarmi meglio,  và scritta una cosa del genere ?
int pippo
..
...
..
Oppure và utilizzata direttamente ? 


Mi sta venendo un dubbio. Ho la necessità di utilizzare una lista
concatenata che deve essere anch'essa visibile a tutti i file .c .
Come mi devo comportare ?
Se ad sempio ho un file che deve inserire dati in questa lista,
un'altro la deve leggere ed un'altro ancora deve cancellare degli
elementi come và dichiarata ?
E' corretta una cosa del genere :
file header.h:
extern struct lista
{
 //dichiarazioni
};
//prototipi delle funzioni che utilizzano questa lista
file riempi.c
struct lista* LISTAPTR
//Utilizzo le funzioni su questa lista
e così per i file leggi.c e cancella.c.
E' sbalgiato fare una cosa del genere  ?

Nessuno può aiutarmi ???

 Nessuno può aiutarmi ???
La risposta ti e' gia' stata data.
Definisci la variabile globale in un file, negli altri
aggiungi un extern.
es.
file_1.c
int pippo;
file_2.c
extern int pippo;
Questo e' quello che devi, fare indipendentemente dal tipo
della variabile.
extern int pippo;
NON VA INIZIALIZZATA.
La cosa di cui devi assicurarti e' di non fare cose del genere.
file_1.c
char pippo[30];
file_2.c
extern char* pippo;
Questo non funziona.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG