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
Tabella 1: Proprietà delle variabili e delle funzioni dell'esempio.

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:

Definizione

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.