码迷,mamicode.com
首页 > 其他好文 > 详细

setjmp的跳转

时间:2019-04-07 22:03:16      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:img   .com   finish   print   goto   fun   http   退出   int   

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

** 答:setjmp跳转

  • 介绍:
    技术图片

  • 举例:
#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第一次调用返回值为0,进入if循环,调用a(),print出第一行,调用b,print第二行,再直接跳转到main函数ret的位置,此时ret置为5,再退出main函数。

setjmp的跳转

标签:img   .com   finish   print   goto   fun   http   退出   int   

原文地址:https://www.cnblogs.com/Mered1th/p/10667161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!