PDA

Visualizza la versione completa : [C] Domanda su variabili globali


cristal
31-08-2009, 15:27
Salve,
leggendo un po' per internet ho letto che:

variabile globale static visibile solo all'interno del file in cui dichiarata.
variabile globale extern visibile anche da altri file.

Se ci che ho percepito giusto mi domando: una variabile globale deve essere necessariamente dichiarata o static o extern o pu anche essere dichiarata semplicemente senza uno dei due modificatori? Se pu essere dichiarata anche senza uno dei modificatore, quale il suo ruolo?

Grazie

cristal
31-08-2009, 15:42
Allora...approfondendo forse dovrebbe essere cosi:

Esempio 1

file f1.c

static int a; //la variabile globale a visibile solo a tutte le funzioni del file f1.c


Esempio 2
file f1.c

int a; // la variabile globale a pu essere visibile anche alle funzioni di altri file

file f2.c

extern int a; //uso la variabile dichiarata nel file f1.c
...
int i;
i=a;
...


Potreste confermarmi la correttezza di questo?

grazie

frankitt
31-08-2009, 18:52
Ecco un link in cui viene spiegato molto bene (http://digilander.libero.it/uzappi/C/C-classimem.html)

MItaly
01-09-2009, 18:00
Originariamente inviato da cristal
Potreste confermarmi la correttezza di questo?

corretto; l'uso di static in questo contesto fa s che il compilatore non scriva nel file oggetto dato in output le informazioni sulla variabile in questione, dato che si specificato che essa non deve essere accessibile da altri moduli. Se invece static non viene specificato il compilatore inserisce nel file oggetto generato le informazioni necessarie al linker per risolvere i riferimenti a tale variabile degli altri moduli oggetto. Tali riferimenti non risolti al momento della compilazione vengono infatti generati dal compilatore quando in un sorgente il codice fa riferimento ad una variabile dichiarata come extern; il compilatore in questa situazione lascia i riferimenti non risolti segnalando al linker che dovr sistemare lui la faccenda.

Loading