我有一个同名的本地变量和全局变量。
int var = 10;
int main() {
int var = var;
printf("%d", var);
return 0;
}
运行程序会输出:0
为什么?
答案 0 :(得分:4)
全局变量与它无关,你可以注释掉那行代码。当编译器在另一个外部作用域中找到与变量同名的局部变量时,将始终使用局部变量。
因此," var"在表达式int var = var;
中引用自身:局部变量。将变量初始化为其未初始化的值并没有任何意义。该值将保持不确定状态,当您在程序中使用该值时,您将调用未定义的行为:任何事情都可能发生。
答案 1 :(得分:2)
int var = var
中的main()
实际上并未访问文件范围内的var
。
结果实际上是未定义的行为,因为它试图访问尚未初始化的本地var
的值。因此,您获得的任何结果(零,42,重新格式化您的硬盘驱动器)都是有效的。
尝试使用不同的编译器构建代码,您可以获得不同的输出。
出于好奇,我编译,构建并运行相同的代码(除了添加#include <stdio.h>
之外),我收到的输出是41944322
。我当前机器上的编译器是gcc 4.8.1(mingw)。