PDA

Visualizza la versione completa : [C++] Variabili globali -static- extern


Gianni91
21-01-2012, 10:51
Ciao a tutti,volevo una conferma su ciò che ho capito,su questi tre argomenti..
Quando dichiaro una variabile extern significa che la sua definizione é presente in un'altro file del mio progetto.
Le variabili globai sono tutte static,ma quando la dichiaro static esplicitamente ,sono "protette" cioè visibili solo in quel file in cui vengono definite..
Se cerco di accedervi da altri file il linker mi da errore.
Giusto??
Ma il tempo di vita delle mie variabili non static,qual'é il file,o il progetto??
Grazie

shodan
21-01-2012, 12:22
Originariamente inviato da Gianni91
Quando dichiaro una variabile extern significa che la sua definizione é presente in un'altro file del mio progetto.

Si. Per essere precisi, il linker si aspetta che la variabile sia definita in un solo modulo. Se non lo è da errore.



Le variabili globai sono tutte static,ma quando la dichiaro static esplicitamente ,sono "protette" cioè visibili solo in quel file in cui vengono definite..

Lo sono a preciscindere. Se vuoi accedervi devi dichiararle extern in un file header.


Ma il tempo di vita delle mie variabili non static,qual'é il file,o il progetto??
Grazie

Se dichiari una variabile all'interno di un ciclo for, essa esiste solo in quel for.
Se lo fai all'interno di una funzione, solo all'interno della funzione.
Dipende dallo scope.

Gianni91
21-01-2012, 13:34
Originariamente inviato da shodan
Se dichiari una variabile all'interno di un ciclo for, essa esiste solo in quel for.
Se lo fai all'interno di una funzione, solo all'interno della funzione.
Dipende dallo scope.

ok io parlavo di una variabile globale,quindi al di fuori delle funzioni,queste posso essere utilizzare negli agli file ,che fanno parte del mio progetto???

shodan
21-01-2012, 13:51
Una variabile globale definita all'interno di un file .cpp ha visibilità solo in quel file.
Per avere visibilità in altri file la devi dichiarare extern in uno o più file header.

extern int variabile è solo un'etichetta per avere il linkage esterno.

Loading