Condividi tramite


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