C ++ несколько объявлений в локальной области видимости - PullRequest
2 голосов
/ 03 марта 2011

Насколько я знаю, в C ++ можно объявлять одно и то же имя несколько раз, поскольку оно имеет один и тот же тип во всех этих объявлениях.Чтобы объявить объект типа int, но НЕ определить его, используется ключевое слово extern.Таким образом, следующее должно быть правильным и скомпилировано без ошибок:

extern int x;
extern int x; // OK, still declares the same object with the same type.
int x = 5;    // Definition (with initialization) and declaration in the same
              // time, because every definition is also a declaration.

Но как только я переместил это внутрь функции, компилятор (GCC 4.3.4) жалуется, что я перераспределяю x и чтоэто незаконноСообщение об ошибке следующее:

test.cc:9: error: declaration of 'int x'
test.cc:8: error: conflicts with previous declaration 'int x'

, где int x = 5; в строке 9 и extern int x в строке 8.

Мой вопрос: Если множественные объявления не должны быть ошибками, то ПОЧЕМУ это ошибка в данном конкретном случае?

1 Ответ

7 голосов
/ 03 марта 2011

Объявление extern объявляет что-то, имеющее внешнюю связь (означающее, что определение должно появиться в области видимости файла в некоторой единице компиляции, возможно, текущей). Локальные переменные не могут иметь внешних связей, поэтому компилятор жалуется, что вы пытаетесь сделать что-то противоречивое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...