对使用 longjmp 恢复的东西感到困惑?

问题描述 投票:0回答:2

如这里所述:https://stackoverflow.com/a/58498330当使用

setjmp
longjmp
,并返回到
setjmp
的范围时,所有可访问对象都具有与函数
时相同的值longjmp
被称为.

我对此感到困惑,因为

longjmp
把我们带到了程序中一个完全不同的地方,在那里我们调用
longjmp
时的局部变量是零意义的。那么当变量都不同时,值怎么会“相同”呢?

c++ c posix
2个回答
0
投票

这里的关键词是accessible。通过调用

longjmp
展开的堆栈部分的局部变量不再存在,因此不再可访问。故事结束。

值得指出的是,这些变量的析构函数(如果有的话)不会被调用。因此,不要在 C++ 代码中使用

longjmp
。改用 C++ 异常处理,它以受控方式展开堆栈。


0
投票

关于什么accessible变量恢复和不变存在误解

参考短语是:

返回到

setjmp
的范围后,抽象机的所有可访问对象、浮点状态标志和其他组件都具有与执行
std::longjmp
时相同的值,除了非易失性局部变量在
setjmp
的范围内,如果自
setjmp
调用以来它们的值已更改,则其值是不确定的。

© www.soinside.com 2019 - 2024. All rights reserved.