Единственное различие между объявлении внешней переменной в области видимости пространства имен:
extern int x;
void foo() {
cout << x;
}
и объявить его в области видимости функции:
void foo() {
extern int x;
cout << x;
}
является то, что в последнем случае x
является только видно внутри функция.
Все, что вы делаете, еще больше затягивает область применения декларации extern
.
Вот аналогичный пример использования пространств имен:
в области видимости пространства имен:
#include <string>
using std::string;
void foo() {
string str1;
}
string str2; // OK
В области видимости функции:
#include <string>
void foo() {
using std::string;
string str1;
}
string str2; // Error - `using` not performed at this scope
эти сообщения связаны: http://stackoverflow.com/questions/16459422/why-does-declaring-an-extern-variable-inside-main-works-but- not-define-it-in и http://stackoverflow.com/questions/9686198/what-is-the-use-of-declaring-a-static-variable-as-extern-inside-a-function – taocp