C标准库参考指南译文系列(8)setjmp.h

来源:互联网 发布:黑客攻击电脑软件 编辑:程序博客网 时间:2024/05/22 05:04

英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.8.html

原文作者:Eric Huss

中文译者:柳惊鸿 Poechant

版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客"http://blog.csdn.net/poechant


8. setjmp.h

头文件setjmp用于控制底层调用和函数跳转。

:

    setjmp();


函数:


    longjmp();


变量:


    typedef jmp_buf


8.1. 变量和定义

变量jmp_buf是一个数组类型,用于存储setjmplongjmp信息。


8.2. setjmp

声明:

    int setjmp(jmp_buf environment);


存储当前运行环境environment变量中。如果返回一个非零值,则表明longjmp到达了源码中所运行到的位置。否则表明运行环境已被存储。


8.3. longjmp

声明:

    void longjmp(jmp_buf environment, int value);


这个函数会使environment恢复调用setjmp时存储的environment值。这个函数时程序掉转到曾调用setjmp处,好像setjmp返回value变量的值一样。变量value的值不回为0。如果传的是0,就用1来代替。如果调用setjmp的函数已经运行终止了,则返回值是不确定的。


实例:


    #include<setjmp.h>

    #include<stdio.h>


    void some_function(jmp_buf);


    int main(void)

    {

      int value;

      jmp_buf environment_buffer;


      value=setjmp(environment_buffer);

      if(value!=0)

      {

        printf("Reached this point from a longjmp with value=%d.\n",value);

        exit(0);

      }

      printf("Calling function.\n");

      some_function(environment_buffer);

      return 0;

    }


    void some_function(jmp_buf env_buf)

    {

      longjmp(env_buf,5);

    }


程序的输出是:


    Calling function.

    Reached this point from a longjmp with value=5.


该系列译文在持续更新中⋯⋯

C标准库参考指南系列译文(1)assert.h

C标准库参考指南系列译文(2)ctype.h

C标准库参考指南系列译文(3)errno.h

C标准库参考指南系列译文(4)float.h

C标准库参考指南系列译文(5)limits.h

C标准库参考指南系列译文(6)locale.h

C标准库参考指南系列译文(7)math.h

C标准库参考指南系列译文(8)setjmp.h

C标准库参考指南系列译文(9)signal.h

C标准库参考指南系列译文(10)stdarg.h

C标准库参考指南系列译文(11)stddef.h

C标准库参考指南系列译文(12)stdio.h(A)


版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客"http://blog.csdn.net/poechant

-

原创粉丝点击