02.06.2013 Views

CORSO C++ STANDARD - Didattica.it

CORSO C++ STANDARD - Didattica.it

CORSO C++ STANDARD - Didattica.it

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Visibil<strong>it</strong>à di variabili globali<br />

Se una variabile globale, visibile in tutti i files sorgente del programma (cioè<br />

defin<strong>it</strong>a senza lo specificatore static), non é inizializzata, deve esistere una<br />

e una sola dichiarazione senza lo specificatore extern, altrimenti il linker<br />

darebbe errore, con messaggio "unresolved symbol" (se tutte le dichiarazioni<br />

hanno extern), oppure "one or more multiply defined symbols" (se ci sono<br />

due dichiarazioni senza extern); se invece la variabile é inizializzata,<br />

l'inizializzazione deve essere presente in un solo file (in questo caso lo<br />

specificatore extern é opzionale), mentre negli altri files la variabile deve<br />

essere dichiarata con extern e non deve essere inizializzata.<br />

Visibil<strong>it</strong>à di costanti globali<br />

In <strong>C++</strong> le costanti globali (cioè le variabili globali defin<strong>it</strong>e const, con<br />

inizializzazione obbligatoria), obbediscono a regole differenti e precisamente:<br />

• di default le costanti globali hanno file scope;<br />

• affinché una costante globale sia visibile dappertutto, è necessaria la<br />

presenza dello specificatore extern anche nella dichiarazione in cui la<br />

costante è inizializzata (ovviamente, come per le variabili,<br />

l'inizializzazione deve essere presente una sola volta).<br />

Tabella riassuntiva<br />

Variabile globale senza<br />

inizializzazione<br />

Variabile globale con<br />

inizializzazione<br />

specificatore extern<br />

nel file di definizione<br />

Visibil<strong>it</strong>à globale<br />

specificatore extern<br />

negli altri files<br />

File scope<br />

vietato obbligatorio specificatore static<br />

opzionale<br />

Costante globale obbligatorio<br />

obbligatorio<br />

senza inizializzazione<br />

obbligatorio<br />

senza inizializzazione<br />

specificatore static<br />

default

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!