c-全局和局部变量具有相同的名称,意外值



我有一个同名的局部变量和一个全局变量。

int var = 10;
int main() {
    int var = var;
    printf("%d", var);
    return 0;
}

运行程序会给出以下输出:0

为什么?

全局变量与它无关,您可以注释掉那行代码。当编译器在另一个外部作用域中找到与变量同名的局部变量时,将始终使用该局部变量。

因此,表达式int var = var;中的两个"var"都指代自身:局部变量。将变量初始化为其未初始化的值是没有任何意义的。该值将保持不确定状态,当您在程序中使用该值时,您将调用未定义的行为:任何事情都可能发生。

main()中的int var = var实际上并不访问文件范围内的var

结果实际上是未定义的行为,因为它试图访问尚未初始化的本地var的值。所以你得到的任何结果(0,42,重新格式化硬盘)都是有效的。

试着用不同的编译器构建代码,你很可能会得到不同的输出。

出于好奇,我编译、构建和运行了相同的代码(除了添加#include <stdio.h>),得到的输出是41944322。我当前机器上的编译器是gcc 4.8.1(mingw)。

相关内容

  • 没有找到相关文章

最新更新