标签:
函数原型 int setjmp(jmp_buf env)
setjmp参数env的类型是一个特殊类型jmp_buf。这一数据类型是某种形式的数组,其中存放:在调用longjmp时能用来恢复栈状态的所有信息。因为需要在另一个函数中引用env变量,所以规范的处理方式是将env变量定义为全局变量。setjmp函数初次启用时返回 0 值。
函数原型 void longjmp(jmp_buf env, int val)
longjmp函数的中参数env是由setjmp函数所保存的堆栈环境、参数val设置setjmp函数的返回值。longjmp函数本
身是没有返回值的,它执行跳转到保存env参数的setjmp函数调用,并由setjmp函数调用返回,此时setjmp函数的
返回值就是 val 。
#include <setjmp.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> int j = 0; jmp_buf env; int main () { int i, k=0; // setjmp函数用于设置跳转的目的堆栈情况,直接调用该函数,则返回0,若由longjmp的调用, // 导致setjmp被调用,则返回val(longjmpd的第二个参数) // env保留了需要返回的位置的堆栈情况 i = setjmp(env); printf("setjmp=[%d];j=[%d];k=[%d]\n", i, j++, k++); if (j > 5) exit(0); sleep(1); // 进行跳转 longjmp(env, j); return 0; }执行截图
标签:
原文地址:http://blog.csdn.net/u012296503/article/details/51354194