使用 goto 跳过范围变量初始化不会产生所需的输出

Alb*_*ngh 7 c goto

#include <stdio.h>

int main()
{
    int a = 10;
    goto inside;
    {
        int a = 20;
        {
            inside:
            printf("%d",a);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么它打印输出为 0,而不是 10?即使它寻找最近的范围,即。int a = 20没有明确执行。内存只包含int a = 10;那么为什么这里是0?

Kei*_*son 7

printf调用时,名称a指的是该名称的第二个变量,即初始化为 的变量20。外部a,即初始化为 的那个10,是隐藏的。没有理由printf打印10

goto语句跳过了 inner 的初始化a,因此它永远不会被初始化为20。为它分配了空间,但它的值是任意垃圾。的0印刷存在是内的内容a。它可以是任何东西。