La parola chiave extern significa "dichiarazione senza definizione". In altre parole, è un modo per dichiarare esplicitamente una variabile o forzare una dichiarazione senza una definizione.
Quindi in file2
, hai appena dichiarato la variabile senza definizione (nessuna memoria allocata). In file1
, hai dichiarato e definito una variabile di tipo integer
. Qui è stata allocata memoria su BSS segment perché si dispone di un globale non inizializzato (per C).
In C++, le informazioni globali sono memorizzate in un'area di dati per processo .
differenza tra dichiarazione e definizione:
Per comprendere come le variabili esterne riferiscono alla parola extern, è necessario conoscere la differenza tra la definizione e dichiara una variabile.
Quando una variabile è definita, il compilatore alloca la memoria per quella variabile e, eventualmente, inizializza anche il suo contenuto su un valore. Quando viene dichiarata una variabile, il compilatore richiede che la variabile sia definita altrove.
La dichiarazione informa il compilatore che esiste una variabile con quel nome e tipo, ma il compilatore non deve allocare memoria perché è allocata altrove.
fonte
2013-08-02 06:29:25
Ciao Pierre, grazie per aver chiarito il dubbio. Ma come nel file 1, var 'a' è globale e memorizza la memoria nel segmento di dati, quindi sarà nel segmento di dati o come hai menzionato nello stack? Non sono chiaro con questo. puoi spiegare per favore. – anand
Nel tuo caso è nel [segmento BSS] (http://en.wikipedia.org/wiki/Data_segment) perché è una variabile globale inizializzata. –
Non esiste un segmento BSS nel C++ standard. –