我试图更好地理解C中的块作用域,以及该标准是否提供了在退出块作用域时弹出堆栈元素的任何保证,这些元素可能在进入该作用域时被推送到堆栈中。举个例子,在声明了一个块内的变量后,跳转到块外的标签(这只是跳到C中的标签,没有什么特别的)会导致堆栈损坏吗?
这里有一个人为的例子,如果它有助于进一步定义这个问题,假设是-O0。我的困惑是,当跳转到fatal标签的执行路径被命中时,是否会从堆栈中弹出err2。因为标签在C中没有什么特别之处,所以我假设err2不会从堆栈中弹出,从而导致堆栈损坏。
void foo()
{
int err;
if (err = baz()) {
printf("error %i", err);
int err2;
if (err2 = another_thing())
goto fatal;
}
printf("done");
return;
fatal:
printf("there was a fatal error");
}https://stackoverflow.com/questions/55368125
复制相似问题