在C中,不允许使用跳跃函数的goto语句,而执行这种跳转功能的是函数
setjmp 和longjmp,这两个寒暑对于处理发生在很深的嵌套函数调用中的出错情况非常有用。
goto 是局部跳转,即仅能在一个函数内跳转
而setjmp和longjmp 可以在栈上跳过若干调用桢,返回到当前函数调用路径上的一个函数中。
#include
int setjmp(jmp_buf env); 若直接调用则为0, 若从longjmp返回则为非0
void longjmp(jmp_buf env, int val);
env是一个特殊类型jmp_buf, 这一数据类型是某种形式的数组,其中存放在调用
longjmp时能用来恢复栈状态的所有信息。一般env变量是个全局变量,因为需要从另一个函数中引用他。
当检查到一个错误时, 则以两个参数调用longjmp函数, 第一个就是setjmp所用的
jmp_buf, 第二个val,是非0值,它成为从setjmp处返回的值。
使用第二个参数的原因是对于一个setjmp可以有多个longjmp, setjmp可以根据返回值
来判断是从哪一个函数之中返回。
阅读(3458) | 评论(0) | 转发(0) |