identificatore esterno della classe di archiviazione
una variabile dichiarata con extern l'identificatore di classe di archiviazione è un riferimento a una variabile con lo stesso nome definito a livello esterno in uno dei file di origine del programma.l'interno extern la dichiarazione viene utilizzata per semplificare la definizione di variabile a livello esterno visibile all'interno del blocco.A meno che non siano dichiarati in caso contrario al livello esterno, una variabile dichiara con extern la parola chiave è visibile solo nel blocco in cui è dichiarata.
Esempio
In questo esempio vengono illustrate le dichiarazioni interne e a livello esterno:
// extern_StorageClassSpecified.c
#include <stdio.h>
void other( void );
int main()
{
// Reference to i, defined below:
extern int i;
// Initial value is zero; a is visible only within main:
static int a;
// b is stored in a register, if possible:
register int b = 0;
// Default storage class is auto:
int c = 0;
// Values printed are 1, 0, 0, 0:
printf_s( "%d\n%d\n%d\n%d\n", i, a, b, c );
other();
return;
}
int i = 1;
void other( void )
{
// Address of global i assigned to pointer variable:
static int *external_i = &i;
// i is redefined; global i no longer visible:
int i = 16;
// This a is visible only within the other function:
static int a = 2;
a += 2;
// Values printed are 16, 4, and 1:
printf_s( "%d\n%d\n%d\n", i, a, *external_i );
}
in questo esempio, la variabile i viene definito a livello esterno con valore iniziale 1.extern dichiarazione in main la funzione viene utilizzata per dichiarare un riferimento al livello esterno i.statico variabile a viene inizializzato a 0 per impostazione predefinita, poiché l'inizializzatore viene omesso.la chiamata a printf visualizza i valori 1, 0, 0 e 0.
in other funzione, l'indirizzo della variabile globale i viene utilizzato per inizializzare statico variabile puntatore external_i.Ciò è possibile in quanto la variabile globale ha statico la durata, significante il relativo indirizzo resta invariato durante l'esecuzione del programma.Successivamente, la variabile i è stato ridefinito come variabile locale con valore iniziale 16.Questa ridefinizione non influisce sul valore del livello esterno i, che è nascosto mediante l'utilizzo del relativo nome per la variabile locale.Il valore di globale i è ora solo indirettamente accessibile all'interno di questo blocco, tramite il puntatore external_i.Il tentativo di assegnare l'indirizzo di autoidentificatori variabile i un puntatore non funziona, poiché sia diverso ogni volta il blocco viene inserito.la variabile a viene dichiarato come classe statico variabile e inizializzato su 2.ciò a non sia in conflitto con a in main, poiché statico le variabili a livello interno sono visibili solo all'interno del blocco nel quale sono dichiarate.
la variabile a viene aumentato di 2, fornendo 4 come il risultato.se other la funzione è stata chiamata trovano nello stesso programma, il valore iniziale a essere 4.interno statico le variabili sono i valori al termine del programma e quindi registra di nuovo il blocco in cui sono dichiarate.
Vedere anche
Concetti
Identificatori di classe di archiviazione per le dichiarazioni a livello interno