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
  • 相关阅读:
    51nod 1179 最大的最大公约数 (数论)
    POJ 3685 二分套二分
    POJ 3045 贪心
    LIC
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    HDU 2389 Rain on your Parade
    HDU 2819 Swap
    HDU 1281 棋盘游戏
    HDU 1083 Courses
  • 原文地址:https://www.cnblogs.com/dream397/p/14092220.html
Copyright © 2011-2022 走看看