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

** 答:setjmp跳转

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 介绍:
    setjmp的跳转 随笔 第1张

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

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

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

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

setjmp的跳转 随笔 第2张

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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄