Classi di archiviazione CC Storage Classes

La "classe di archiviazione" della variabile determina se l'elemento dispone di una durata "globale" o "locale".The "storage class" of a variable determines whether the item has a "global" or "local" lifetime. C chiama queste due durate "statica" e "automatica".C calls these two lifetimes "static" and "automatic." Un elemento con una durata globale esiste già e mantiene lo stesso valore nel corso dell'esecuzione del programma.An item with a global lifetime exists and has a value throughout the execution of the program. Tutte le funzioni hanno durate globali.All functions have global lifetimes.

Alle variabili automatiche o alle variabili con durate locali viene allocato un nuovo spazio di archiviazione ogni volta in cui il controllo dell'esecuzione passa nel blocco nel quale vengono definite.Automatic variables, or variables with local lifetimes, are allocated new storage each time execution control passes to the block in which they are defined. Al termine dell'esecuzione, le variabili non hanno più valori significativi.When execution returns, the variables no longer have meaningful values.

C fornisce i seguenti identificatori della classe di archiviazione:C provides the following storage-class specifiers:

SintassiSyntax

storage-class-specifier:storage-class-specifier:
autoauto

registerregister

staticstatic

externextern

typedeftypedef

__declspec (extended-decl-modifier-seq) /* Specifico di Microsoft */__declspec ( extended-decl-modifier-seq ) /* Microsoft Specific */

Ad eccezione di __declspec, in una dichiarazione è possibile usare un solo storage-class-specifier in declaration-specifier.Except for __declspec, you can use only one storage-class-specifier in the declaration-specifier in a declaration. Se non viene creata alcuna specifica della classe di archiviazione, le dichiarazioni all'interno di un blocco creano oggetti automatici.If no storage-class specification is made, declarations within a block create automatic objects.

Gli elementi dichiarati con l'identificatore auto o register hanno durate locali.Items declared with the auto or register specifier have local lifetimes. Gli elementi dichiarati con l'identificatore static o extern hanno durate globali.Items declared with the static or extern specifier have global lifetimes.

Poiché typedef e __declspec sono semanticamente diversi dagli altri quattro terminali storage-class-specifier, vengono descritti separatamente.Since typedef and __declspec are semantically different from the other four storage-class-specifier terminals, they are discussed separately. Per informazioni specifiche su typedef, vedere Dichiarazioni typedef.For specific information on typedef, see Typedef Declarations. Per informazioni specifiche su __declspec, vedere Attributi di classi di archiviazione estesi.For specific information on __declspec, see Extended Storage-Class Attributes.

La posizione delle dichiarazioni di funzione e di variabile nei file di origine influisce anche sulla classe di archiviazione e sulla visibilità.The placement of variable and function declarations within source files also affects storage class and visibility. Le dichiarazioni all'esterno di tutte le definizioni di funzione vengono visualizzate a livello "esterno".Declarations outside all function definitions are said to appear at the "external level." Le dichiarazioni all'interno delle definizioni di funzione vengono visualizzate a "livello interno".Declarations within function definitions appear at the "internal level."

Il significato esatto di ogni identificatore della classe di archiviazione dipende da due fattori:The exact meaning of each storage-class specifier depends on two factors:

Vedere ancheSee Also

Dichiarazioni e tipiDeclarations and Types