ZBLOG

setjmp 和longjmp 如何使用

使用setjmp和longjmp的基本流程如下:

  1. 在需要保存状态信息的位置调用setjmp函数,并将其返回值存储在一个变量中,以备后续使用。

  2. 在需要跳转到之前保存的状态信息处时,调用longjmp函数并传入之前记录下来的变量以及跳转目标。

以下是示例代码:

#include <stdio.h>
#include <setjmp.h>

jmp_buf env;

void foo() {
    printf("entering foo\n");
    longjmp(env, 1); // 跳转到 setjmp 中记录的位置
    printf("exiting foo\n"); // 不会执行
}

int main() {
    if (setjmp(env) == 0) { // 第一次调用 setjmp ,返回值为 0
        printf("calling foo\n");
        foo();
        printf("exiting main\n"); // 不会执行
    } else { // 第二次通过 longjmp 跳转回来了
        printf("back in main\n");
    }
    return 0;
}

上述代码先调用了foo函数,然后在其中通过longjmp跳转回setjmp处。由于此时返回值不为0,因此程序进入else分支,并输出”back in main”。如果没有跳转,则会输出”exiting foo”和”exiting main”。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=611

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?