C++

[C] C语言的setjmp和longjmp

2016-03-03  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读