zoukankan      html  css  js  c++  java
  • setjmp

    C 库宏 - setjmp

    描述

    C 库宏 int setjmp(jmp_buf environment) :创建本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序的调用环境于env参数所指的缓冲区,env将被longjmp使用。如果是从setjmp直接调用返回,setjmp返回值为0。如果是从longjmp恢复的程序调用环境返回,setjmp返回非零值。

    #include <stdio.h>
    #include <setjmp.h>
     
    static jmp_buf buf;
     
    void second(void) {
        printf("second
    ");         // 打印
        longjmp(buf,1);             // 跳回setjmp的调用处 - 使得setjmp返回值为1
    }
     
    void first(void) {
        second();
        printf("first
    ");          // 不可能执行到此行
    }
     
    int main() {   
        if ( ! setjmp(buf) ) {
            first();                // 进入此行前,setjmp返回0
        } else {                    // 当longjmp跳转回,setjmp返回1,因此进入此行
            printf("main
    ");       // 打印
        }
     
        return 0;
    }

    让我们编译并运行上面的程序,这将产生以下结果:

    second
    main



    #include <stdio.h>
    #include <setjmp.h>
    
    static jmp_buf buf;
    
    int main(void)
    {
        int i;
        printf("%d
    ",i = setjmp(buf));//第一次输出0,第二次输出longjmp的第二个参数。
        if (i==0)
            longjmp(buf,3);//可自行修改第二参数查看不同结果。
        return 0;
    }

    运行结果为:

    0
    3
  • 相关阅读:
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
  • 原文地址:https://www.cnblogs.com/dream397/p/14092220.html
Copyright © 2011-2022 走看看