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". Un elemento con durata globale esiste e ha un valore per tutta l'esecuzione del programma. Tutte le funzioni hanno durate globali.
Le variabili automatiche o le variabili con durata locale vengono allocate nuove risorse di archiviazione ogni volta che il controllo di esecuzione passa al blocco in cui sono definiti. 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 esterne a 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 dichiarazioni a livello esterno e identificatori di classe di archiviazione per dichiarazioni a livello interno 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.