Condividi tramite


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