В этот вопрос я спросил почему
//foo.h
namespace foo{
int bar;
}
дал мне ошибку компоновщика при включении foo.h
в нескольких файлах. Оказывается мне нужно extern int bar;
чтобы предотвратить ошибку. Зачем мне extern
? Я не хочу печатать extern
перед каждой переменной в каждом пространстве имен, к которому я хочу получить доступ в нескольких единицах перевода. Почему не int bar;
делать то, что я ожидал? Почему Комитет по стандартам C ++ настаивает на том, чтобы заставить меня печатать extern
везде?
Экстерн говорит, что декларация хранения для переменной будет сделана в другом месте. Затем компоновщик идет и ищет символ в другом файле во время ссылки. Без extern вы говорите компилятору, выделите место для глобала. Если вы сделаете это более чем в одном файле, компоновщик увидит несколько экземпляров одного и того же символа.
Почему Комитет по Стандартам C ++ настаивает на том, чтобы я набирал пост
везде?
Никогда не говорил писать везде ….
namespace foo{
extern "C++" {
int bar;
int car;
int dar;
int xar;
}
}