Riepilogo sulle Classi di Storage in Linguaggio C
Abbiamo studiato, nelle lezioni precedenti, le classi di storage sia per le variabili che per le funzioni.
Adesso, con queste informazioni in nostro possesso, possiamo vedere uno schema riassuntivo delle classi di storage in linguaggio C.
Schema Riepilogativo delle Classi di Storage
Analizziamo il programma che segue. In esso sono riportate le possibili combinazioni di classi di storage per variabili e funzioni in linguaggio C.
int a;
extern int b;
static int c;
void f(int d, register int e) {
auto int g;
int h;
static int i;
extern int j;
register int k;
}
extern void l(int m);
static void n(int o);
Le proprietà delle variabili e delle funzioni di sopra sono riportate nella tabella che segue:
Tipo | Variabile o Funzione | Linkage | Visibilità | Durata di vita |
---|---|---|---|---|
Variabile | a |
Esterno | File | Statica |
Variabile | b |
N/A | File | Statica |
Variabile | c |
Interno | File | Statica |
Funzione | f |
Esterno | File | N/A |
Variabile | d |
Interno | Blocco | Automatica |
Variabile | e |
Interno | Blocco | Automatica |
Variabile | g |
Interno | Blocco | Automatica |
Variabile | h |
Interno | Blocco | Automatica |
Variabile | i |
Interno | Blocco | Statica |
Variabile | j |
N/A | Blocco | Statica |
Variabile | k |
Interno | Blocco | Automatica |
Funzione | l |
Esterno | File | N/A |
Funzione | n |
Interno | File | N/A |
Un appunto riguarda le variabili b
e j
. Queste variabili sono dichiarate come extern
, per cui non essendo definite in questo file sorgente, non è possibile determinare il loro linkage. Quindi, nella tabella, abbiamo indicato il linkage come N/A, ossia Non Applicabile.
Osservando la tabella, possiamo notare che le più importanti classi di storage sono static
ed extern
. Infatti, auto
è ridondante e non ha effetto mentre con i compilatori moderni la classe register
ha assunto un'importanza sempre minore.
Ricapitolando:
Classi di Storage in Linguaggio C
Le variabili in linguaggio C possono avere le seguenti classi di storage:
extern
: linkage esterno, visibilità file, durata di vita statica.static
: linkage interno, visibilità file, durata di vita statica.auto
: linkage interno, visibilità blocco, durata di vita automatica (default e ridondante).register
: linkage interno, visibilità blocco, durata di vita automatica. Non si può prendere l'indirizzo di una variabile.
Le funzioni in linguaggio C possono avere le seguenti classi di storage:
extern
: linkage esterno, visibilità file (default e ridondante).static
: linkage interno, visibilità file.
In Sintesi
In questa lezione abbiamo visto un riepilogo delle classi di storage in linguaggio C. Queste informazioni sono fondamentali per capire come le variabili e le funzioni sono allocate in memoria e come sono accessibili all'interno di un programma.
Esiste un'ulteriore classe di storage per le variabili: thread_local
. La studieremo più avanti.
Nella prossima lezione, invece, inizieremo a studiare i Qualificatori di Tipo.