【发布时间】:2013-08-09 07:41:30
【问题描述】:
我无法理解为什么这不起作用。
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 已将i 的范围限制为定义它的当前翻译单元。
static int i =3global(我的意思是至少它在翻译单元中可见)不是在这里,即使它的翻译单元的范围受到限制?那为什么编译器找不到呢?
当我编译前两个版本时,我得到以下编译时错误:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
我无法理解此错误消息。另外,为什么它抱怨它是静态的declaration 不是definition 吗?
【问题讨论】:
-
究竟是什么“不起作用”?是编译问题吗?运行时问题?我正在用 VS 2010 编译你的代码,它似乎工作正常。
-
GCC 编译器,我得到一个编译时错误静态声明,我遵循非静态声明。