Jedyna różnica między deklarowania zmiennej zewnętrznej w zakresie przestrzeni nazw:
extern int x;
void foo() {
cout << x;
}
i deklarowania go na zakres funkcji:
void foo() {
extern int x;
cout << x;
}
to w tym ostatnim przypadku x
jest tylko widoczny wewnątrz funkcji.
Wszystko, co robisz, jeszcze bardziej zaostrza zakres deklaracji extern
.
Oto analogiczny przykład za pomocą nazw:
At zakresie przestrzeni nazw:
#include <string>
using std::string;
void foo() {
string str1;
}
string str2; // OK
W zakresie funkcji:
#include <string>
void foo() {
using std::string;
string str1;
}
string str2; // Error - `using` not performed at this scope
te posty są powiązane: http://stackoverflow.com/questions/16459422/why-does-declaring-an-extern-variable-inside-main-works-but- nie-definiując-it-in i http://stackoverflow.com/questions/9686198/what-is-the-use-of-declaring-a-static-variable-as-extern-inside-a-function – taocp