"extern" 关键字用法

"extern" keyword usage

我有以下代码片段:

 #include<iostream>

 int main()
 {
     extern int a;
     printf("a = %d", a)
 }
 int a = 10;

上面的示例代码打印 10。我猜它应该打印垃圾值。有人可以解释一下吗?

全局变量具有静态持续时间,并且在 main 运行之前初始化静态。因此,在调用 printf 时,a 的值已经设置为 10

linker 将 extern int a 解析为 a 在程序执行之前的 link 时间在 main 之后声明。正如 Borgleader 所说,a 是一个全局变量,因此它在调用 main 之前初始化。

C++ 程序不是从上到下线性执行的。 main 不会在解析过程中一看到其定义就神奇地执行。