我想了解这段代码:
#include<stdio.h>
int main()
{
extern int a;
printf("%d\n", a);
return 0;
}
int a=20;
当我运行它时,a
的值为20.但这应该是不可能的,因为全局变量a
是在底部定义的。
答案 0 :(得分:3)
extern
声明只能用于全局变量。它告诉编译器全局变量是在别处定义的,并要求链接器解决它。
在您的代码中,extern int a
引用示例底部定义的a
。它可以在不同的翻译单元中同样明确定义。
正如其他人所指出的那样,a
的初始化发生在输入main()
之前。
答案 1 :(得分:2)
不是问题。通过将变量声明为extern
,您承诺将链接器定义为全局范围内当前或其他源文件的一部分。
答案 2 :(得分:1)
全局变量的初始化发生在调用main()
之前。
因此,即使初始化a = 20
位于main()
的实现之下,它总是先执行,因此它可以在程序启动时使用(假设您在范围内适当地声明了变量)使用extern int a
)。