C标准库 longjmp函数

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;
}

运行结果如图所示。

longjmp()函数


赞(0)
未经允许不得转载:极客笔记 » C标准库 longjmp函数

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址