La visibilità di un identificatore è costituita da quella parte di programma sorgente in cui è possibilie compiere accessi legali all’oggetto individuato da quell’identificatore.
In C++ si distinguono i seguenti livelli di visibilità:
- a livello di programma: le variabili con visibilità a livello di programma sono dichiarate a livello esterno e risultano accessibili anche alle parti di programma poste in altri file sorgente;
- a livello di file: le variabili con visibilità a livello di file sono dichiarate a livello esterno tramite un’opportuna parola chiave (static) e risultano accessibili dal punto in cui compare la loro dichiarazione fino alla fine del file sorgente in cui la dichiarazione stessa compare;
- a livello di funzione o di blocco: le variabili con visibilità a livello di blocco sono dichiarate a livello interno e risultano accessibili solo dal loro punto di dichiarazione fino alla fine del blocco.
Bisogna però fare attenzione a non confondere il periodo di vita di una variabile con la visibilità del suo identificatore, dato che una variabile globale può essere nascosta e quindi non avere campo di visibilità totale, da una dichiarazione di una variabile locale con lo stesso nome.
Per esempio, il programma C++
int i=5;
main()
{while(i<8)
{ int i=10;
cout<
}
return 0;
}
che apparentemente dovrebbe mostrare una sola volta il valore 10, in realtà entra in un ciclo infinito in quanto la variabile i definita nel blocco interno del while copre la variabile i globale che viene testata e che mantiene sempre il valore iniziale 5 e non può superare il valore 8.