Concetti Chiave
- I specificatori di classe di memorizzazione controllano il tempo di vita e la visibilità di variabili e funzioni in un programma.
- Il specificatore "extern" consente di referenziare variabili globali dichiarate in file esterni al programma.
- Il specificatore "static" limita la visibilità di variabili globali e funzioni a livello di file e prolunga il tempo di vita delle variabili locali.
- Il specificatore "register" suggerisce al compilatore di rendere l'accesso a una variabile più rapido, anche se il compilatore può ignorare questo suggerimento.
- I qualificatori di tipo "const" e "volatile" forniscono proprietà aggiuntive ai tipi di dato, come la protezione da modifiche e l'indicazione di modifiche esterne.
Specificatori di classe di memorizzazione
Specificatori di classe di memorizzazione, modificano il tempo di vita e la visibilità di variabili e funzioni in un programma:
- extern: permette di referenziare una variabile globale la cui dichiarazione potrebbe essere in un file esterno
- static: se con variabili globali e funzioni, limita lo scope a livello di file, se con variabili locali, estende il tempo di vita alla durata intera del programma
- register: suggerisce al compilatore di rendere l’accesso alla variabile più rapido (memorizzando la variabile nei registri del preprocessore invece che nella RAM), ma il compilatore può ignorare questo suggerimento. Solo poche variabili possono essere memorizzate nei registri e possono appartenere ad un ristretto insieme di tipi. Se una variabili è dichiarata register, nonostante sia memorizzata nei registri o meno, non è possibile conoscere il suo indirizzo
- auto: è di default alle variabili locali, infatti sono anche chiamate variabili automatiche, questo specificatore è superfluo dato che le dichiarazioni in cui può essere usato sono di default auto
Quindi è possibile usare un solo specificatore di classe di memorizzazione per dichiarazione.
Qualificatori di tipo
I qualificatori di tipo, forniscono proprietà aggiuntive ai tipi di dato:
- const: indica un tipo di dato il cui contenuto non può essere modificato, quindi è read-only
- volatile: indica un tipo di dato che può essere modificato da procedure esterne al programma, come dal sistema operativo o dall’hardware. I qualificatori di tipo possono essere applicati a tutte le combinazioni possibili di specifica tori di tipo, modificatori di tipo e specifica tori di classe di memorizzazione.
Domande da interrogazione
- Qual è la funzione dello specificatore "extern" nelle variabili globali?
- Qual è la funzione dello specificatore "extern" nelle variabili globali?
- Come influisce lo specificatore "static" sulle variabili locali e globali?
- Come influisce lo specificatore "static" sulle variabili locali e globali?
- Qual è la differenza tra le variabili dichiarate con "register" e quelle con "auto"?
- Qual è la differenza tra le variabili dichiarate con "register" e quelle con "auto"?
Lo specificatore "extern" consente di referenziare una variabile globale dichiarata in un file esterno, facilitando l'accesso a variabili condivise tra diversi file.
Lo specificatore "extern" consente di referenziare una variabile globale dichiarata in un file esterno, facilitando l'accesso a variabili condivise tra diversi file.
Con le variabili globali e funzioni, "static" limita la visibilità a livello di file, mentre con le variabili locali estende il loro tempo di vita per l'intera durata del programma.
Con le variabili globali e funzioni, "static" limita la visibilità a livello di file; con le variabili locali, estende il tempo di vita della variabile per l'intera durata del programma.
Le variabili "register" suggeriscono al compilatore di memorizzarle nei registri per un accesso più rapido, mentre le variabili "auto" sono quelle locali di default, senza necessità di specificatore, e non hanno restrizioni di accesso.
Le variabili "register" suggeriscono al compilatore di memorizzarle nei registri per un accesso più rapido, mentre le variabili "auto" sono quelle locali di default, senza necessità di specificatore, e non hanno un tempo di vita esteso.