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

标签 c goto

#include <stdio.h>

int main()
{
    int a = 10;
    goto inside;
    {
        int a = 20;
        {
            inside:
            printf("%d",a);
        }
    }
}
为什么它打印输出为 0,而不是 10?即使它寻找最近的范围,即。 int a = 20没有明确执行。内存只包含int a = 10;那为什么是 0 呢?

最佳答案

在点 printf打电话,名字a指的是该名称的第二个变量,即初始化为 20 的变量.外a , 初始化为 10 ,被隐藏。 printf 没有理由打印 10 .goto语句跳过内部 a 的初始化,所以它永远不会被初始化为 20 .为它分配了空间,但它的值是任意垃圾。 0正在打印的是内部a的内容.它可以是任何东西。

关于c - 使用 goto 跳过范围变量初始化不会产生所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63276974/

相关文章:

C - System V - 删除共享内存段

c - 为什么对数组使用 `(char *[])` 而不是 `(char [][7])` 有效?

计数排序未按预期工作

c++ - 转到优化重构

mysql - 如何在 MySQL 存储函数中使用 goto 标签

sql - 在 SQL 中遇到异常后如何继续运行我的程序?

mysql - C语言如何防止SQL注入(inject)?

c++ - C 和 C++ 中的字符

C89(再次)计算 goto 如何