这是允许的吗?
goto inside;
{
inside:
int a[n];
}
goto语句不得跳出范围之外 具有可变修改类型的标识符在其范围内 标识符
倒数怎么样?
{
goto outside;
int a[n];
}
outside: ;
和
{
int a[n];
goto outside;
}
outside: ;
它们是一样的吗?
答案 0 :(得分:3)
使用goto
退出包含VLA的范围非常好。与使用return
或break
退出该范围没有什么不同。
使用goto
进入带有VLA的作用域的问题是,VLA声明被视为包含一些调用alloca()
以保留阵列堆栈空间的代码。如果您使用goto
跳过声明,则您也跳过了alloca()
调用,因此可能没有为数组保留任何空间。
请注意,除了alloca()
之外,这与跳过变量初始化(例如int n = 1
)并没有太大区别。 VLA就像总是有一个初始化器一样。