我有以下代码段:
#include<iostream>
int main()
{
extern int a;
printf("a = %d", a)
}
int a = 10;
以上示例代码打印10.我的猜测是应该打印垃圾值。有人可以解释一下吗?
答案 0 :(得分:7)
全局变量具有静态持续时间,并且在main
运行之前初始化静态。因此a
在调用10
时已将其值设置为printf
。
答案 1 :(得分:2)
链接器将extern int a
解析为在程序执行之前链接时main之后声明的a
。正如Borgleader
所说,a
是一个全局变量,所以它在调用main之前初始化。
答案 2 :(得分:1)
C ++程序不是从上到下线性执行的。只要在解析过程中看到它的定义,main
就不会被神奇地执行。