无锡网站托管,如何建设网站济南兴田德润团队怎么样,传媒网站模板,电子商务网站建设与维护意味着什么目录
前言
setjmp宏
longjmp函数
使用方法#xff1a;
实例#xff1a;测试setjmp与longjmp的使用 前言
通常情况下#xff0c;函数会返回到它被调用的位置#xff0c;我们无法使用goto语句改变它的返回的方向#xff0c;因为goto语句只能跳转到同一函数内的某个标号…目录
前言
setjmp宏
longjmp函数
使用方法
实例测试setjmp与longjmp的使用 前言
通常情况下函数会返回到它被调用的位置我们无法使用goto语句改变它的返回的方向因为goto语句只能跳转到同一函数内的某个标号处但是setjmp.h中包含的setjmp宏与longjmp函数可以使一个函数直接跳转至另一个函数不需要返回 setjmp宏 原型int setjmp(jmp_buf env); 作用在程序中标记一个位置 C标准要求jmp_buf必须是一个数组类型因此传递给setjmp的实际上是一个指向数组的数组指针 longjmp函数 函数原型_Noreturn void longjmp(jmp_buf env,int val); 作用跳转至setjmp宏标记的位置 使用方法
1、调用setjmp宏为跳转标记一个位置调用参数是一个jmp_buf类型的变量setjmp会将一个指向自身位置的指针放入该变量中以便将来longjmp函数的使用最后返回0
2、longjmp函数根据setjmp提供的jum_buf类型的参数跳转至setjmp宏所在的位置然后使得setjmp再次返回一个值vallongjmp的第二个参数值
3、总之setjmp会在第一次调用时返回0在后续的调用时返回vallongjmp的第二个参数值
注意事项
1、确保longjmp的env参数一定已经被setjmp初始化过
2、包含setjmp最初调用的函数一定不能在调用longjmp之前返回
实例测试setjmp与longjmp的使用
#include stdio.h
#include setjmp.h jmp_buf env;
void f1();
void f2();void f1()
{printf(f1 begins\n);f2();printf(f1 returns\n);
}void f2()
{printf(f2 begins\n);longjmp(env,1);printf(f2 returns\n);
}int main()
{if (setjmp(env) 0){printf(setjmp returned 0\n);}else{printf(Program terminates: longjmp called\n);return 0;}f1();printf(Program terminates normally);return 0;
}~over~