Identificatore di classi di archiviazione extern
Una variabile dichiarata con l'identificatore extern
di classe di archiviazione è un riferimento a una variabile con lo stesso nome definito in un altro file di origine. Viene usata per rendere visibile la definizione della variabile a livello esterno. Una variabile dichiarata come extern
non ha spazio di archiviazione allocato per se stesso, ma solo un nome.
Esempio
In questo esempio sono illustrate le dichiarazioni a livello interno e a livello esterno:
// Source1.c
int i = 1;
// Source2. c
#include <stdio.h>
// Refers to the i that is defined in Source1.c:
extern int i;
void func(void);
int main()
{
// Prints 1:
printf_s("%d\n", i);
func();
return;
}
void func(void)
{
// Address of global i assigned to pointer variable:
static int *external_i = &i;
// This definition of i hides the global i in Source.c:
int i = 16;
// Prints 16, 1:
printf_s("%d\n%d\n", i, *external_i);
}
In questo esempio, la variabile i
è definita in Source1.c con un valore iniziale 1. Una extern
dichiarazione in Source2.c rende 'i' visibile in tale file.
func
Nella funzione viene usato l'indirizzo della variabile i
globale per inizializzare la static
variabile puntatore external_i
. Ciò funziona perché la variabile globale ha static
durata, ovvero l'indirizzo non cambia durante l'esecuzione del programma. Viene poi definita una variabile i
all'interno dell'ambito di func
come variabile locale con valore iniziale 16. Questa definizione non influisce sul valore di i
a livello esterno, che viene nascosto mediante l'uso del nome per la variabile locale. Il valore della variabile globale i
è ora accessibile solo tramite il puntatore external_i
.
Vedi anche
Identificatori di classi di archiviazione per dichiarazioni di livello interno