longjmp()函数用于非局部转移进程,使进程跳转到setjmp处执行。
longjmp()函数 语法
void longjmp(jmp_buf jmp,int retval);
参数jmp为jmp_buf结构体,用于保存发生调用时的局部环境;
参数retval表示此时setjmp的返回值。
longjmp()函数本身无返回值,它执行后跳转到保存jmp的setjmp函数的调用,并由setjmp函数返回1。
longjmp()函数 示例
本示例使用longjmp函数进行非局部跳转,执行到longjmp时,程序跳转到setjmp函数中进行判断,并输出结果。其具体代码如下所示:
#include<setjmp.h>
#include<stdio.h>
#include<stdlib.h>
jmp_buf buf;
ss()/*自定义函数*/
{
printf("%s","in ss() ");/*输出信息*/
longjmp(buf,1);/*进行非局部跳转*/
printf("%s","you will never see this ");/*跳转后不会输出此信息*/
}
int main(void)
{
if(setjmp(buf))/*根据判断堆栈内容输出信息*/
{
printf("%s","back in main() ");
}
else
{
printf("%s","first time throught ");
ss();/*调用自定义函数*/
}
return 0;
}
运行结果如图所示。