一、实用情景:
在C中,goto语句是不能跨越函数的,而执行这类跳转功能的就是函数setjmp和longjmp,这两个函数对于处理发生在深层嵌套函数调用中的出错情况是非常有用的
二、函数说明:
#include <setjmp.h>
int setjmp (jmp_buf env);
setjmp() 函数是一次调用,2次返回,第一次调用时返回0,而在第二次返回时是longjmp()的调用时返回的,此时返回的值是longjmp里设定的val值。
void longjmp (jmp_buf env, int val);
此函数一般设定在条件语句里,条件一旦满足就执行longjmp函数,而longjmp函数的执行结果就是实现远程跳转,它会跳转到setjmp处,并且把jmp_buf env = val,就是该函数同时把setjmp函数里的env设置成val。从而实现远程跳转的功能。
三、使用实例:
执行结果:
四、使用说明
远程跳转对于自动变量和寄存器变量的状态是不确定的,不同的实现对于编译优化与否有不同的结果,如果期望得到稳定的可移植行,最好不要使用自动变量和寄存器变量,而改为使用全局、静态或者volatile变量。