Concetti Chiave

  • Ogni variabile ha un campo di visibilità specifico, permettendo di chiamarla solo all'interno del suo scope e impedendo duplicati di nomi nello stesso contesto.
  • Le variabili globali, dichiarate a livello di programma, sono accessibili da tutte le funzioni, ma il loro uso può complicare la leggibilità del codice.
  • Le variabili locali, dichiarate all'interno di una funzione, sono visibili solo nel loro blocco e possono mascherare variabili con lo stesso nome in scope esterni.
  • La parola chiave extern consente di accedere a variabili globali definite altrove nel programma senza allocare memoria, risolvendo i riferimenti durante il linking.
  • La parola chiave static limita la visibilità di variabili e funzioni al solo file in cui sono definite e inizializza automaticamente le variabili static a zero se non specificato diversamente.

Campo di visibilità delle variabili

Ogni dichiarazione di variabile ha un campo di visibilità, e solo in questo determinato campo può essere chiamata. All’interno dello stesso scope non possono esserci variabili con lo stesso nome, questo vale anche per tutti gli identificatori di un programma.
Le variabili dichiarate a livello di programma sono chiamate variabili globali, quindi visibili e utilizzabili da tutte le funzioni del programma, anche se diviso in più file.

Poiché una variabile modificabile da tutte le funzioni, contenute anche in file esterni, potrebbe rendere il programma difficile da leggere e controllare, è meglio evitare di usare le variabili globali.

Le variabili dichiarate invece all’interno di una funzione sono dette variabili locali o automatiche, queste sono visibili e utilizzabili solo nel blocco di cui fanno parte. Una variabile locale maschera le variabili con lo stesso nome esterne al blocco.

Uso di extern e static

La parola chiave extern permette di vedere all’interno di un file, funzione o blocco, una variabile globale definita in qualche parte del programma.

extern ;

Questo dichiarazione non causa allocazione di memoria per la variabile, sarà poi il linker a occuparsi di risolvere il riferimento alla variabile esterna.

Durante la compilazione “extern int x=0;” puo interpretare in due modi diversi:

- la variabile x è globale, definita da qualche parte nel programma ma c’è un errore di sintassi

- la variabile x non è globale, quindi l’istruzione equivale a int x=0;

Quindi è possibile utilizzare extern con le variabile globali contenute nello stesso file, anche se superfluo.

La parola chiave static permette di modificare la visibilità delle dichiarazioni di variabili e funzioni. Se le variabili static non sono inizializzate, sono inizializzate automaticamente a 0 (cioè, tutti i bit dello spazio riservato alla variabile sono inizializzati a zero).

static permette di modificare le modalità di memorizzazione di:

- variabili globali, allora la variabile diventa visibile solo a livello di file

- funzioni, visibile solo all’interno del file


Domande da interrogazione

  1. Qual è la differenza tra variabili globali e variabili locali?
  2. Le variabili globali sono visibili e utilizzabili da tutte le funzioni del programma, mentre le variabili locali sono visibili solo all'interno del blocco in cui sono dichiarate. Le variabili locali possono mascherare variabili con lo stesso nome esterne al blocco.

  3. Qual è il ruolo della parola chiave "extern" nel contesto delle variabili?
  4. La parola chiave "extern" consente di accedere a una variabile globale definita in un'altra parte del programma senza allocare memoria per essa. È utile per riferirsi a variabili globali anche all'interno dello stesso file, sebbene possa risultare superflua.

  5. Come influisce la parola chiave "static" sulla visibilità delle variabili e delle funzioni?
  6. La parola chiave "static" limita la visibilità delle variabili e delle funzioni al solo file in cui sono dichiarate. Inoltre, se le variabili statiche non sono inizializzate, vengono automaticamente impostate a zero.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community