[C] C语言的setjmp和longjmp

(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容