Я не могу понять, почему это не работает.Порядок определения `static` и` extern declaration` в единицах перевода
extern int i;
int main()
{
printf(" %d ", i);
}
static int i =3;
Кроме того, это не работает:
extern int i;
static int i =3;
int main()
{
printf(" %d ", i);
}
Но если static
переменная определена перед extern declaration
она работает:
static int i =3;
extern int i;
int main()
{
printf(" %d ", i);
}
Как я понимаю из extern int i
говорит, что i
является настоящее время где-то в другом месте и вот, как это выглядит (int i
)
Но где-то еще средства:
1) Может быть, позже точка в блоке same
перевода как global variable
.
2) Возможно, в каком-то other
переводческом подразделении.
Я думал, что (1)
будет действителен, хотя static int i = 3
ограничил область видимости до текущей единицы перевода, где она определена.
Это не static int i =3
global
(я имею в виду, что это видно в единицах перевода), хотя он имеет ограниченную область действия для своей единицы перевода? Тогда почему компилятор не может его найти?
Когда я компилирую первые две версии, которые я получаю следующую ошибку компиляции времени:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
Я не могу понять, это сообщение об ошибке. Кроме того, почему он жалуется на статику declaration
, а не definition
?
Что именно "не работает"? Это проблема компиляции? Вопрос времени выполнения? Я компилирую ваш код с VS 2010 и, похоже, работает правильно. – Nbr44
GCC comipler, я получаю ошибку времени компиляции, статическое объявление i следует за нестатической декларацией. –