当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 setjmp用法及代码示例


C语言setjmp头文件(setjmp.h)中setjmp宏的用法及代码示例。

用法:

int setjmp (jmp_buf env);
节省调用环境以实现跳远
具有函数形式的宏env包含有关该代码执行点上调用环境当前状态的信息,以便可以在以后的调用中将其恢复longjmp

呼唤longjmp信息存储在env恢复相同的状态,并将控件返回到同一点(对setjmp),该值被评估为特定的非零值。

调用环境的状态包括所有可访问对象的值,但函数本地自动持续时间的值除外,这些值没有volatile限定的类型,并且在调用之前会发生变化longjmp;这些具有不确定的值。

的调用setjmp应该单独是一个表达式语句,或者在选择或迭代语句中作为(可能取反的)整个控制表达式进行评估,或者与整数常量表达式进行比较。否则,会导致未定义的行为

参数

env
类型的对象jmp_buf存储环境信息的位置。

返回值

该宏可能返回不止一次:第一次,直接调用它;在这种情况下,它始终返回零。
什么时候longjmp调用时将信息设置为env,宏再次返回;这次它返回传递给的值longjmp如果它不为零,则作为第二个参数,或者1如果为零。

示例

/* setjmp example: error handling */
#include <stdio.h>      /* printf, scanf */
#include <stdlib.h>     /* exit */
#include <setjmp.h>     /* jmp_buf, setjmp, longjmp */

main()
{
  jmp_buf env;
  int val;

  val = setjmp (env);
  if (val) {
    fprintf (stderr,"Error %d happened",val);
    exit (val);
  }

  /* code here */

  longjmp (env,101);   /* signaling an error */

  return 0;
}


函数用途setjmp设置一个catch-point,以后可以由它调用longjmp表示错误。

输出:
Error 101 happened



相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C setjmp function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。