setjmp的跳转

Posted mered1th

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setjmp的跳转相关的知识,希望对你有一定的参考价值。

** 问 :goto语句只能在函数内使用,那如果想要在函数内部直接跳到函数外怎么办呢?**

** 答:setjmp跳转

  • 介绍:
    技术图片

  • 举例:
#include<stdio.h>
#include<setjmp.h>
jmp_buf envbuf;  //保存进程的上下文

void b() {
    printf("I am b function.
");
    longjmp(envbuf, 5);  //回到setjmp的位置
}

void a() {
    printf("before call b, I am a
");
    b();
    printf("after b finish, I am a
");
}

int main() {
    int ret;
    ret = setjmp(envbuf);
    if (0 == ret) {
        a();
    }
    return 0;
}

技术图片

setjmp第一次调用返回值为0,进入if循环,调用a(),print出第一行,调用b,print第二行,再直接跳转到main函数ret的位置,此时ret置为5,再退出main函数。

以上是关于setjmp的跳转的主要内容,如果未能解决你的问题,请参考以下文章

C 语言中函数的跳转

第5章 进程环境_非局部跳转

二十Linux 进程与信号---非局部跳转

vue使用vue构建多页面应用

非局部跳转函数 setjmp()与longjmp()

setjmp和longjmp浅析