美文网首页C++
[C] C语言的setjmp和longjmp

[C] C语言的setjmp和longjmp

作者: 何幻 | 来源:发表于2016-03-03 07:17 被阅读69次

(1)setjmp和longjmp

setjmp(jmp_buf j)必须首先被调用。它表示“使用变量j记录现在的位置,函数返回零”。
longjmp(jmp_buf j, int i)可以接着被调用。它表示“回到j所记录的位置,让它看上去像是从原先的setjmp()函数返回一样。但是函数返回i,使代码能够知道它是实际上通过longjmp()返回的。”

(2)示例

#include <setjmp.h>
jump_buf buf;

#include <setjmp.h>
banana(){
    printf("in banana() \n");
    longjmp(buf,1);
    
    /* 以下代码不会被执行 */
    printf("you'll never see this, because i longjmp'd");
}

main (){
    if(setjmp(buf)){
        printf("back in main\n");
    }else{
        printf("first time through\n");
        banana();
    }
}

输出结果如下:

first time through
in banana()
back in main

注:
(1)以上例子出自《C专家编程》P128。
(2)setjmplongjmp的概念类似于call/cc

相关文章

  • [C] C语言的setjmp和longjmp

    (1)setjmp和longjmp setjmp(jmp_buf j)必须首先被调用。它表示“使用变量j记录现在的...

  • 嵌入式C编程中的异常处理

    我们今天说说一种典型的实现C语言异常处理的方法,即以setjmp()函数和longjmp()函数实现的异常...

  • jmp_buf的使用,结构定义为数组

    今天看《C专家编程》第7章第8节,最后提到用setjmp/longjmp从信号终恢复。顺便敲了代码看看效果,就对其...

  • C标准库——

    setjmp.h头文件定义了宏setjmp(), 函数longjmp()和变量类型 jmp_buf, 该变量类型会...

  • 使用setjmp和longjmp

    在做看雪2020 KCTF秋季赛第3题 重返地球时,发现了一对奇怪函数:setjmp3、longjmp。不清楚它们...

  • unix 第七章

    自动变量,寄存器变量,易失变量 volatile setjmp 和 longjmp函数 易失变量容易被改变 所以每...

  • 非本地跳转函数setjmp和longjmp

    C语言提供了一种用户级的异常控制流形式,称为非本地跳转(nonlocal jump),它可以将控制流直接从一个函数...

  • hello world: 基于setjmp协程的闪灯程序

    usr_app.h: usrapp.c: setjmp为选修,就自己体会了。

  • sigsetjmp siglongjmp

    这两个函数的作用可以类比setjmp和longjmp,只不过这两个函数用在信号处理函数中。 在信号处理函数执行的过...

  • C++远征之起航篇

    C++和C语言的联系与区别: C++是C语言发展而来,C语言是C++的子集 C++更高效3.相对于C语言,C++添...

网友评论

    本文标题:[C] C语言的setjmp和longjmp

    本文链接:https://www.haomeiwen.com/subject/baunkttx.html