美文网首页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

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