C语言中的“goto”行为:符号是如何处理的?

3
我可以帮您翻译成中文。以下是需要翻译的内容:

我在想,对于以下代码:

{
    int i = 42;
    goto end;
}
end:

当我们到达 end: 时,符号 i 的状态是什么(在调试器中会看到什么)?即使超出范围,它是否仍然存在?这是否有标准行为,还是与编译器相关?
为了举例说明,假设使用带有调试符号的gcc编译代码。
此外,在C ++中行为是否相同?
谢谢。

3
你执行这段代码时有什么阻碍吗?你甚至可以使用不同的优化标志或不同版本的gcc进行编译。 - aisbaa
6
如果你离开了作用域,所有局部变量都会被销毁。无论以何种方式离开作用域都不会改变这一点。 - Sergio
@aisbaa 执行这段代码会如何帮助回答这个问题? - CompuChip
1
@CompuChip,假设执行程序时处于调试器下,它将回答“(在调试器中我们会看到什么)”这部分内容。 - aisbaa
2个回答

8

在代码块中声明的变量仅存在于该代码块内(无论是否使用goto语句)。

c++中也有相同的行为。


那么我假设在C++中,RAII将会应用并且析构函数会被调用,对吗? - Senua
1
是的,但原始类型除外。 - Dr.Haimovitz

3

状态为不可见(超出范围)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接