gpt4 book ai didi

c - goto 和 c 中的自动变量初始值设定项

转载 作者:太空狗 更新时间:2023-10-29 17:19:20 25 4
gpt4 key购买 nike

教程里说

如果您使用 goto 语句跳转到 block 的中间,则该 block 内的自动变量不会被初始化。

那么在下面的代码中,如果可以访问/声明 i 那么为什么它没有被初始化?

int main()
{
goto here;
{
int i=10;
here:
printf("%d\n",i);
}
return 0;
}

ps:输出是一些垃圾值。

最佳答案

您的问题“如果 i 可以访问,为什么...”背后没有逻辑。能够“访问i”并不是支持或反对任何事情的理由。它只是意味着 printf 语句与 i 在同一范围内。但是,由于您跳过了初始化程序,因此变量未初始化(正如您的教程所说)。

读取未初始化的变量是未定义的行为,因此您的程序格式错误。

变量 i 的内存已经在编译时预留,因为已知该变量存在于内部 block 中。内存不会像您想象的那样动态分配。它已经存在,但由于 goto,它从未被设置为任何确定的值。

经验法则:不要跳过初始值设定项。

关于c - goto 和 c 中的自动变量初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11447634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com