zoukankan      html  css  js  c++  java
  • 头文件<setjmp.h>

    头文件<setjmp.h>定义了宏setjmp,并且为了绕过正常的函数调用和返回规则声明了一个函数和一个类型。

    1、类型jmp_buf

    它是一个数组类型,适合存储恢复一个调用环境所需的信息。

    2、宏setjmp

    int setjmp(jmp_buf env);

    说明:宏setjmp将它的调用环境保存在它的jmp_buf类型的参数中,以供后面longjmp使用。

    返回值:如果返回一个来自直接的调用,则宏setjmp返回0;如果返回一个来自longjmp的调用,则宏setjmp返回一个非0值。

    3、函数longjmp

    void longjmp(jmp_buf enb,int val);

    说明:函数longjmp使用jmp_buf参数来恢复宏setjmp最近一次调用保存的环境;如果没有这样的调用或包含宏setjmp调用的函数已经在其前终止执行,则行为未定义。

    返回值:在longjmp完成之后,程序会继续执行。函数longjmp不能让宏setjmp返回0,如果val是0,则宏setjmp返回1。

    例:

    #include <setjmp.h>
    #include <stdio.h>

    static jmp_buf buf;
    void second();

    void first()
    {
    printf("%c ",buf[0]);  //
    second();
    printf("first function ");  //不会执行
    }

    void second()
    {
    printf("second function ");
    longjmp(buf,3);  //跳到setjmp,并设置setjmp的返回值为3
    }

    void main()
    {
    if(!setjmp(buf))  //直接调用宏setjmp时返回0,并将执行环境保存在buf中
    first();
    else
    printf("main function ");
    }

    结果:

    h
    second function
    main function

  • 相关阅读:
    关于获取多个id的用法
    纯css打造凹进与突出效果
    ie8兼容半透明效果css
    常用函数积累
    ie兼容图片缩小后模糊失真(锯齿)问题
    图片放大_css3
    弹出层跳出原框架
    ifame_自适应高度
    POJ #2479
    SPOJ #752. Power it!
  • 原文地址:https://www.cnblogs.com/Mr-Wenyan/p/7219875.html
Copyright © 2011-2022 走看看