Home C&C++函数库 c++ 语法 程序源码 Linux C库

longjmp

函数   <csetjmp>

void longjmp (jmp_buf env, int val);

外部跳转

将环境恢复到由env指示的状态,计算将env填充为val的setjmp表达式。

函数不会返回到调用它的位置。相反,该函数将控制权转移到上一次使用setjmp填充env的位置, 并将整个表达式计算为val(除非这是0,在这种情况下,它的值为1)。

如果env没有被之前的setjmp调用填充,或者使用这种调用的函数已经终止执行, 则会导致未定义的行为。

在c++中,实现平台可以执行栈展开,以自动销毁函数本地的自动持续时间对象。 如果它调用了任何非普通析构函数( non-trivial destructors),它将导致未定义的行为。

☲  参数


env

类型为jmp_buf的对象,该对象由之前对setjmp的调用填充,该调用包含将环境恢复到该点的信息。
val

setjmp表达式计算得到的值。如果该值为0,则表达式的计算结果为1。

☉  返回值



None(函数从不返回)。

☣  示例



/* longjmp example */
#include <stdio.h>      /* printf */
#include <setjmp.h>     /* jmp_buf, setjmp, longjmp */

main()
{
  jmp_buf env;
  int val;

  val=setjmp(env);

  printf ("val is %d\n",val);

  if (!val) longjmp(env, 1);

  return 0;
}

输出:
val is 0
val is 1

↭  数据竞争



setjmplongjmp的作用域仅限于当前线程。

➤  异常(C++)



如果潜在的栈展开中没有涉及到具有非普通析构函数的自动对象,则此函数永远不会抛出异常(no-throw保证)。
否则,它将导致未定义的行为。

🍄  另请参阅


setjmp 为跳转保留调用环境(宏 )
jmp_buf 保存信息以恢复调用环境的类型(类型)

联系我们 免责声明 关于CandCplus 网站地图