运行此代码后:
#include <stdio.h>
int x;
int main(void)
{
printf("%d\n",x);
return 0;
}
int x=5;
我预计输出应该是0
. 因为程序的顺序控制结构int x;
应该是先执行,然后0
打印,最后int x=5;
执行。但它给出了输出5
。
5
程序如何访问x
in printf
?
运行此代码后:
#include <stdio.h>
int x;
int main(void)
{
printf("%d\n",x);
return 0;
}
int x=5;
我预计输出应该是0
. 因为程序的顺序控制结构int x;
应该是先执行,然后0
打印,最后int x=5;
执行。但它给出了输出5
。
5
程序如何访问x
in printf
?
第一个充当前向声明,后者充当实际定义。
在函数之外声明的变量默认值在 main 运行之前设置。所以你看到的是正确的行为。其他源文件中声明的变量也是如此。
全局变量在main()
运行前初始化。这意味着一个函数完全有可能访问文件中出现在它之后的东西,只要它是可见的(即前向声明的)。
话虽如此,您实际上不应该在一个文件中对同一个变量进行多个声明。它可能会导致混淆(主要是程序员)关于它实际初始化的内容和位置。
编辑:为了澄清,全局范围内的函数/变量不像函数内的一系列语句那样执行。函数的声明/定义的位置与它何时被调用与任何其他代码无关。它只确定周围范围的哪些部分对其可见。在您的情况下,这意味着main()
不会在您的两int
行之间调用。当它完成所有其他初始化时,它被运行时调用。