Этот код прекрасно компилируется:
extern int i = 10;
void test()
{
std::cout << "Hi" << i << std::endl;
}
Пока этот код выдает ошибку:
void test()
{
extern int i = 10;
std::cout << "Hi" << i << std::endl;
}
ошибка: у 'i' есть 'extern' и инициализатор
Я прочитал это в C++ Primer:
Любое объявление, которое включает явный инициализатор, является определением. Мы можем предоставить инициализатор для переменной, определенной как extern, но это переопределяет extern. Экстерн с инициализатором является определением. Ошибочно предоставлять инициализатор во внешней части функции.
Может ли кто-нибудь дать объяснение, почему это ошибка, если она выполняется локально в функции, хотя это допускается в глобальной области?