我无法理解为什么这不起作用。
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 =3
global
(我的意思是至少它在翻译单元中可见)在这里,即使它的翻译单元的范围受到限制?那为什么编译器找不到呢?
当我编译前两个版本时,我得到以下编译时错误:
error: static declaration of ‘i’ follows non-static declaration
note: previous declaration of ‘i’ was here
我无法理解此错误消息。另外,为什么它会抱怨它是静态declaration
的,不是definition
吗?