Classe di archiviazione
L'identificatore di classe di archiviazione in una definizione di funzione fornisce la funzione extern
o static
la classe di archiviazione.
Sintassi
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
è specifico di Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
optare
type-specifier
declaration-specifiers
optare
type-qualifier
declaration-specifiers
optare
storage-class-specifier
: /* Per le definizioni di funzione */
extern
static
Se una definizione di funzione non include , storage-class-specifier
per impostazione predefinita la classe di archiviazione è extern
. È possibile dichiarare in modo esplicito una funzione come extern
, ma non è necessaria.
Se la dichiarazione di una funzione contiene , storage-class-specifier
extern
l'identificatore ha lo stesso collegamento di qualsiasi dichiarazione visibile dell'identificatore con ambito file. Se non è presente alcuna dichiarazione visibile con ambito file, l'identificatore ha un collegamento esterno. Se un identificatore ha ambito file e nessuna storage-class-specifier
, l'identificatore ha un collegamento esterno. Il collegamento esterno indica che ogni istanza dell'identificatore indica lo stesso oggetto o funzione. Per altre informazioni sul collegamento e sull'ambito del file, vedere Durata, ambito, visibilità e collegamento.
Le dichiarazioni di funzione dell'ambito blocco con un identificatore della classe di archiviazione diverso da extern
generano errori.
Una funzione con static
classe di archiviazione è visibile solo nel file di origine in cui è definito. Tutte le altre funzioni, sia che vengano assegnate extern
in modo esplicito o implicito, siano visibili in tutti i file di origine nel programma. Se static
si desidera una classe di archiviazione, deve essere dichiarata nella prima occorrenza di una dichiarazione (se presente) della funzione e nella definizione della funzione.
Sezione specifica Microsoft
Quando le estensioni Microsoft sono abilitate, a una funzione dichiarata originariamente senza una classe di archiviazione (o con extern
la classe di archiviazione) viene assegnata static
una classe di archiviazione se la definizione della funzione si trova nello stesso file di origine e se la definizione specifica static
in modo esplicito la classe di archiviazione.
Quando viene compilata con l'opzione del compilatore /Ze, le funzioni dichiarate all'interno di un blocco usando la parola chiave hanno visibilità globale, che non è true durante la extern
compilazione con /Za. Questa funzionalità non deve essere considerata se la portabilità del codice sorgente è una considerazione.
Fine sezione specifica Microsoft