setjmp
保存程序的当前状态。
语法
int setjmp(
jmp_buf env
);
参数
env
存储变量的环境。
返回值
保存堆栈环境后,返回 0。 如果 setjmp
由于 longjmp
调用而返回,它将返回 longjmp
的 value
参数;如果 longjmp
的 value
参数为 0,则 setjmp
返回 1。 无错误返回。
注解
setjmp
函数保存堆栈环境,你随后可以使用 longjmp
对其进行还原。 结合使用时,setjmp
和 longjmp
提供可执行非本地 goto
的方法。 它们通常用于将执行控制传递给之前调用的例程中的错误处理或恢复代码,而不使用常规调用或返回约定。
对 setjmp
的调用会将当前堆栈环境保存在 env
中。 对 longjmp
的后续调用将还原保存的环境并将控件返回到紧跟在对应的 setjmp
调用后面的点。 可供接收控件的例程访问的所有变量(寄存器变量除外)包含在调用 longjmp
时它们具有的值。
不能使用 setjmp
从本机跳转到托管代码。
Microsoft 专用
在 Windows 上的 Microsoft C++ 代码中,longjmp
使用与异常处理代码相同的堆栈展开语义。 可以安全地在会引发 C++ 异常的相同位置中使用。 但是,此用法不可移植,并且有一些重要的注意事项。 有关详细信息,请参阅 longjmp
。
结束 Microsoft 专用
注意
在可移植的 C++ 代码中,不能假定 setjmp
和 longjmp
支持 C++ 对象语义。 具体来说,如果用 catch
和 throw
替换 setjmp
和 longjmp
将调用任何自动对象的非普通析构函数,则 setjmp
/longjmp
调用对具有未定义的行为。 在 C++ 程序中,建议使用 C++ 异常处理机制。
有关详细信息,请参阅使用 setjmp
和 longjmp
。
要求
例程 | 必需的标头 |
---|---|
setjmp |
<setjmp.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
请参阅 _fpreset
的示例。