Identificatori di classe di archiviazione per le dichiarazioni a livello dell'esterno

Le variabili esterne sono variabili in ambito file.Vengono definiti all'esterno di qualsiasi funzione e sono potenzialmente disponibili in molte funzioni.Le funzioni possono solo essere definite a livello esterno e, pertanto, non possono essere annidate.Per impostazione predefinita, tutti i riferimenti alle variabili esterne e funzioni con lo stesso nome sono riferimenti allo stesso oggetto, ovvero presentano “collegamento esterno.„ (È possibile utilizzare statico parola chiave per eseguire l'override di questo.Visualizzare informazioni più avanti in questa sezione per ulteriori informazioni su statico).

Le dichiarazioni delle variabili a livello esterno sono le definizioni delle variabili (“dichiarazioni di definizione„), o riferimenti alle variabili definite altrove (“dichiarazioni di riferimento„).

Una dichiarazione di variabile esterna che inizializza anche la variabile (in modo implicito o esplicito) è una dichiarazione di definizione della variabile.Una definizione al livello esterno può assumere varie forme:

  • Una variabile dichiarata con statico identificatore classe di archiviazione.È possibile creare in modo esplicito inizializzare statico variabile con un'espressione costante, come descritto in inizializzazione.Se si omette l'inizializzatore, la variabile viene inizializzata a 0 per impostazione predefinita.Ad esempio, questi due istruzioni sono entrambe le definizioni considerate della variabile k.

    static int k = 16;
    static int k;
    
  • Una variabile dichiarata in modo esplicito inizializzate al livello esterno.Ad esempio, int j = 3; è una definizione di variabile j.

Nelle dichiarazioni delle variabili a livello esterno (ovvero all'esterno di tutte le funzioni), è possibile utilizzare statico o extern l'identificatore di classe di archiviazione o omette identificatore classe di archiviazione completamente.Non è possibile utilizzare autoidentificatori e il registro archiviazione-classe-identificatore terminali al livello esterno.

Una volta che una variabile è definita a livello esterno, è visibile in tutto il resto di unità di conversione.La variabile non è visibile prima della dichiarazione nello stesso file di origine.Inoltre, non è visibile in altri file di origine del programma, a meno che una dichiarazione di riferimento lo generi visibile, come descritto di seguito.

Le regole relativi a statico includere:

  • Le variabili dichiarate all'esterno di tutti i blocchi senza statico la parola chiave deve mantenere sempre i valori in qualsiasi programma.Per limitare tale accesso a un'unità di conversione particolare, è necessario utilizzare statico parola chiave.Ciò fornisce a “il collegamento interno„. Per renderli globali a un intero programma, omettere la classe di archiviazione esplicita o utilizzare la parola chiave extern (vedere le regole nell'elenco seguente).Ciò fornisce a “il collegamento esterno.„ Interno e collegamento esterno vengono illustrati in Collegamento.

  • È possibile definire una sola volta una variabile a livello esterno all'interno di un programma.È possibile definire un'altra variabile con lo stesso nome e statico identificatore classe di archiviazione in un'unità di conversione diverso.Da ognuno statico la definizione è visibile solo all'interno della relativa unità di conversione, alcun conflitto.In tal modo utile nascondere i nomi di che devono essere condivisi tra le funzioni di una singola unità di conversione, ma non visibile alle altre unità di conversione.

  • statico l'identificatore di classe di archiviazione può essere applicato alle funzioni anche.Se si dichiara una funzione statico, il nome esterno invisibile del file in cui l'oggetto è dichiarato.

Le regole per l'utilizzo extern essere:

  • extern l'identificatore di classe di archiviazione dichiara un riferimento a un oggetto definito variabile altrove.È possibile utilizzare extern dichiarazione per rendere una definizione in un altro file di origine visibile, o per rendere una variabile visibile prima della definizione nello stesso file di origine.Dopo aver dichiarato un riferimento alla variabile a livello esterno, la variabile è visibile in qualsiasi altra unità di conversione in cui il riferimento dichiarato si verifica.

  • per extern il riferimento sia valido, la variabile che fa riferimento a deve essere definito una sola volta e una sola volta, al livello esterno.questa definizione (senza extern la classe di archiviazione) può essere in uno qualsiasi delle unità di conversione che costituiscono il programma.

Esempio

Nell'esempio riportato di seguito vengono illustrate le dichiarazioni esterne:

/******************************************************************
                      SOURCE FILE ONE 
*******************************************************************/
#include <stdio.h>

extern int i;                // Reference to i, defined below 
void next( void );           // Function prototype            

int main()
{
    i++;
    printf_s( "%d\n", i );   // i equals 4 
    next();
}

int i = 3;                  // Definition of i

void next( void )
{
    i++;
    printf_s( "%d\n", i );  // i equals 5
    other();
}

/******************************************************************
                      SOURCE FILE TWO 
*******************************************************************/
#include <stdio.h>

extern int i;              // Reference to i in 
                           // first source file 
void other( void )
{
    i++;
    printf_s( "%d\n", i ); // i equals 6 
}

I due file di origine in questo esempio contengono altri tre dichiarazioni esterne di i.Solo una dichiarazione è “una dichiarazione di definizione.„ Tale dichiarazione,

int i = 3;

definisce la variabile globale i e inizializzarla con valore iniziale 3.“Fare riferimento a„ dichiarazione di i all'inizio del primo file di origine utilizzando extern rende la variabile globale visibile prima della dichiarazione di definizione nel file.La dichiarazione di riferimento i nel secondo file di origine rende inoltre la variabile visibile nel file di origine.Se un'istanza di definizione per una variabile non viene fornita nell'unità di conversione, il compilatore presuppone la presenza di

extern int x;

dichiarazione di riferimento e tale un riferimento di definizione

int x = 0;

viene visualizzato in un'altra unità di conversione del programma.

tutte e tre le funzioni, main, nexte other, eseguire la stessa attività: aumentano i e stamparla.I valori 4, 5 e 6 vengono stampati.

se la variabile i non è stato inizializzato, sarebbe stato impostato su 0 automaticamente.In questo caso, i valori 1, 2 e 3 sono stati visualizzati.vedere inizializzazione per informazioni sull'inizializzazione variabile.

Vedere anche

Riferimenti

Classi di archiviazione c