C中的外部变量及其范围

时间:2012-01-20 08:18:21

标签: c variables

我想了解这段代码:

#include<stdio.h>
int main()
{
  extern int a;
  printf("%d\n", a);
  return 0;
}
int a=20;

当我运行它时,a的值为20.但这应该是不可能的,因为全局变量a是在底部定义的。

3 个答案:

答案 0 :(得分:3)

extern声明只能用于全局变量。它告诉编译器全局变量是在别处定义的,并要求链接器解决它。

在您的代码中,extern int a引用示例底部定义的a。它可以在不同的翻译单元中同样明确定义。

正如其他人所指出的那样,a的初始化发生在输入main()之前。

答案 1 :(得分:2)

不是问题。通过将变量声明为extern,您承诺将链接器定义为全局范围内当前或其他源文件的一部分。

答案 2 :(得分:1)

全局变量的初始化发生在调用main()之前。

因此,即使初始化a = 20位于main()的实现之下,它总是先执行,因此它可以在程序启动时使用(假设您在范围内适当地声明了变量)使用extern int a)。