Visibilità o Scope delle Variabili in Linguaggio C
Lo Scope di una variabile indica il contesto in cui la variabile stessa è visibile. In questa lezione vedremo come il compilatore C gestisce la visibilità delle variabili.
In particolare vedremo la regola generale di visibilità delle variabili.
Regola di visibilità
Nelle precedenti lezioni abbiamo studiato le variabili locali, le variabili globali e i blocchi di codice. In ogni caso abbiamo studiato quali siano le regole di visibilità di una variabile a seconda dei casi.
Adesso proviamo a riassumere in una regola generale come il compilatore gestisce la visibilità delle variabili.
Regola di visibilità delle variabili
Quando il compilatore C incontra una variabile, cerca di risolvere il suo nome, ossia di trovare la sua dichiarazione. La ricerca della dichiarazione avviene in base alle seguenti regole:
- Se il nome della variabile è lo stesso del nome di una variabile locale, il compilatore utilizza la dichiarazione della variabile locale.
- Nel caso in cui non esista una variabile locale con lo stesso nome, il compilatore cerca una variabile locale con lo stesso nome all'interno del blocco di codice più esterno.
- Se non esiste una variabile locale con lo stesso nome all'interno del blocco di codice più esterno, il compilatore cerca una variabile globale con lo stesso nome.
Tenendo a mente questa regola generale possiamo comprendere quale sarà il comportamento del compilatore C quando incontrerà una variabile.
Per meglio chiarire il tutto studiamo un esempio.
Esempio riassuntivo
Consideriamo il codice che segue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
L'esempio di sopra, anche se un po' estremo, ci permette di comprendere a fondo la regola di visibilità delle variabili.
Andiamo per ordine:
- La variabile
i
dichiarata alla riga 2 è una variabile globale. - La variabile
i
dichiarata all'interno della funzionef
alla riga 4 è un parametro e pertanto è una variabile locale. Avendo lo stesso nome della variabile globale, essa oscurerà la variabile globale all'interno del corpo della funzionef
. - La variabile
i
dichiarata all'interno della funzioneg
alla riga 9 è una variabile locale. All'interno del corpo dig
essa oscurerà la variabile globalei
. - La variabile
i
dichiarata all'interno del bloccoif
alla riga 12 è una variabile locale del bloccoif
. All'interno del corpo del bloccoif
essa oscurerà la variabile localei
dichiarata all'interno della funzioneg
. - La variabile
i
usata nella riga 15 è riconducibile alla variabilei
dichiarata all'interno della funzioneg
alla riga 9. - La variabile
i
usata nella riga 19 è riconducibile alla variabile globalei
dichiarata alla riga 2 in quanto non esiste nessuna variabile locale con lo stesso nome.
In Sintesi
In sintesi, la regola di visibilità delle variabili ci dice che:
- Se il nome di una variabile è lo stesso del nome di una variabile locale, il compilatore utilizza la dichiarazione della variabile locale.
- Se il nome di una variabile non è lo stesso del nome di una variabile locale, il compilatore cerca una variabile locale con lo stesso nome all'interno del blocco di codice più esterno.
- Se non esiste una variabile locale con lo stesso nome all'interno del blocco di codice più esterno, il compilatore cerca una variabile globale con lo stesso nome.
A questo punto abbiamo chiaro i concetti di visibilità o scope delle variabili e la loro durata di vita. Nella prossima lezione analizzeremo un concetto importante che lega lo scope all'esecuzione delle funzioni: le Funzioni Pure e le Funzioni Impure.