【发布时间】:2012-11-11 10:00:05
【问题描述】:
(抱歉英语不好。)
问题 1。
void foo(void)
{
goto inside;
for (;;) {
int stack_var = 42;
inside:
...
}
}
当我转到inside 标签时,是否会在堆栈中为stack_var 分配一个位置? IE。我可以在... 中正确使用stack_var 变量吗?
问题 2。
void foo(void)
{
for (;;) {
int stack_var = 42;
...
goto outside;
}
outside:
...
}
当我转到outside 标签时,是否会在stack_var 的堆栈中被释放?例如。在... 中做return 是否正确?
换句话说,goto 是聪明地正确使用堆栈变量(当我遍历块时自动(取消)分配),还是只是一个愚蠢的跳跃?
【问题讨论】:
-
编译时请注意 raptors。
-
在 C++ 中,您的第二个示例定义良好(并且将为更复杂的自动变量调用正确的析构函数)。然而,第一个具有未定义的行为。我相信在 C 中,唯一会出错的是
stack_var在第一个示例中不会被正确初始化。
标签: c