Classi di archiviazione C

La "classe di archiviazione" della variabile determina se l'elemento dispone di una durata "globale" o "locale". C chiama queste due durate "statiche" e "automatiche". Esiste un elemento con una durata globale e ha un valore durante l'esecuzione del programma. Tutte le funzioni hanno durate globali.

Le variabili automatiche, o le variabili con durate locali, vengono allocate nuove risorse di archiviazione ogni volta che il controllo di esecuzione passa al blocco in cui sono definite. Al termine dell'esecuzione, le variabili non hanno più valori significativi.

C fornisce i seguenti identificatori della classe di archiviazione:

Sintassi

storage-class-specifier:
auto
register
static
extern
typedef
__declspec (extended-decl-modifier-seq) /* Specifico di Microsoft */

Ad eccezione di __declspec, è possibile usare solo uno storage-class-specifier in declaration-specifier in una dichiarazione. Se non viene creata alcuna specifica della classe di archiviazione, le dichiarazioni all'interno di un blocco creano oggetti automatici.

Gli elementi dichiarati con l'identificatore auto o register hanno durate locali. Gli elementi dichiarati con l'identificatore static o extern hanno durate globali.

Poiché typedef e __declspec sono semanticamente diversi dagli altri quattro storage-class-specifier terminali, vengono discussi separatamente. Per informazioni specifiche su typedef, vedere typedef Dichiarazioni. Per informazioni specifiche su __declspec, vedere Attributi di classi di archiviazione estesi.

La posizione delle dichiarazioni di funzione e di variabile nei file di origine influisce anche sulla classe di archiviazione e sulla visibilità. Le dichiarazioni all'esterno di tutte le definizioni di funzione vengono visualizzate a livello "esterno". Le dichiarazioni all'interno delle definizioni di funzione vengono visualizzate a livello "interno".

Il significato esatto di ogni identificatore della classe di archiviazione dipende da due fattori:

  • Se la dichiarazione viene visualizzata a livello interno o esterno

  • Se l'elemento dichiarato è una variabile o una funzione

Gli identificatori di classe di archiviazione per le dichiarazioni di External-Level e gli identificatori di classe di archiviazione per le dichiarazioni di Internal-Level descrivono i storage-class-specifier terminali in ogni tipo di dichiarazione e spiegano il comportamento predefinito quando viene storage-class-specifier omesso da una variabile. In Identificatori di classi di archiviazione con dichiarazioni di funzione vengono descritti gli identificatori della classe di archiviazione usati con le funzioni.

Vedi anche

Dichiarazioni e tipi