Зачем нам нужен extern?

В этот вопрос я спросил почему

//foo.h
namespace foo{
int bar;
}

дал мне ошибку компоновщика при включении foo.h в нескольких файлах. Оказывается мне нужно extern int bar; чтобы предотвратить ошибку. Зачем мне extern? Я не хочу печатать extern перед каждой переменной в каждом пространстве имен, к которому я хочу получить доступ в нескольких единицах перевода. Почему не int bar; делать то, что я ожидал? Почему Комитет по стандартам C ++ настаивает на том, чтобы заставить меня печатать extern везде?

2

Решение

Экстерн говорит, что декларация хранения для переменной будет сделана в другом месте. Затем компоновщик идет и ищет символ в другом файле во время ссылки. Без extern вы говорите компилятору, выделите место для глобала. Если вы сделаете это более чем в одном файле, компоновщик увидит несколько экземпляров одного и того же символа.

10

Другие решения

Почему Комитет по Стандартам C ++ настаивает на том, чтобы я набирал пост
везде?

Никогда не говорил писать везде ….

namespace foo{
extern "C++" {
int bar;
int car;
int dar;
int xar;
}

}
3

По вопросам рекламы [email protected]