4

运行此代码后:

#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程序如何访问xin printf

4

3 回答 3

7

第一个充当前向声明,后者充当实际定义。

于 2014-01-17T13:27:24.690 回答
3

在函数之外声明的变量默认值在 main 运行之前设置。所以你看到的是正确的行为。其他源文件中声明的变量也是如此。

于 2014-01-17T13:26:45.467 回答
3

全局变量在main()运行前初始化。这意味着一个函数完全有可能访问文件中出现在它之后的东西,只要它是可见的(即前向声明的)。

话虽如此,您实际上不应该在一个文件中对同一个变量进行多个声明。它可能会导致混淆(主要是程序员)关于它实际初始化的内容和位置。

编辑:为了澄清,全局范围内的函数/变量不像函数内的一系列语句那样执行。函数的声明/定义的位置与它何时被调用与任何其他代码无关。它只确定周围范围的哪些部分对其可见。在您的情况下,这意味着main()不会在您的两int行之间调用。当它完成所有其他初始化时,它被运行时调用。

于 2014-01-17T13:31:19.603 回答