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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per