Share via


setjmp

保存程序的当前状态。

语法

int setjmp(
   jmp_buf env
);

参数

env
存储变量的环境。

返回值

保存堆栈环境后,返回 0。 如果 setjmp 由于 longjmp 调用而返回,它将返回 longjmpvalue 参数;如果 longjmpvalue 参数为 0,则 setjmp 返回 1。 无错误返回。

注解

setjmp 函数保存堆栈环境,你随后可以使用 longjmp 对其进行还原。 结合使用时,setjmplongjmp 提供可执行非本地 goto 的方法。 它们通常用于将执行控制传递给之前调用的例程中的错误处理或恢复代码,而不使用常规调用或返回约定。

setjmp 的调用会将当前堆栈环境保存在 env 中。 对 longjmp 的后续调用将还原保存的环境并将控件返回到紧跟在对应的 setjmp 调用后面的点。 可供接收控件的例程访问的所有变量(寄存器变量除外)包含在调用 longjmp 时它们具有的值。

不能使用 setjmp 从本机跳转到托管代码。

Microsoft 专用

在 Windows 上的 Microsoft C++ 代码中,longjmp 使用与异常处理代码相同的堆栈展开语义。 可以安全地在会引发 C++ 异常的相同位置中使用。 但是,此用法不可移植,并且有一些重要的注意事项。 有关详细信息,请参阅 longjmp

结束 Microsoft 专用

注意

在可移植的 C++ 代码中,不能假定 setjmplongjmp 支持 C++ 对象语义。 具体来说,如果用 catchthrow 替换 setjmplongjmp 将调用任何自动对象的非普通析构函数,则 setjmp/longjmp 调用对具有未定义的行为。 在 C++ 程序中,建议使用 C++ 异常处理机制。

有关详细信息,请参阅使用 setjmplongjmp

要求

例程 必需的标头
setjmp <setjmp.h>

有关兼容性的详细信息,请参阅 兼容性

示例

请参阅 _fpreset 的示例。

另请参阅

进程和环境控制
longjmp