1. 特点

非goto语句在函数内实施跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一语句.
头文件包含#include

    Void longjmp(jmp_buf env,int val);  
返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值

: setjmp参数evn的类型是一个特殊的类型jmp_buf,这一数据类型是某种形式的数组,其中存放在调用longjmp时能用来恢复栈状态的所有信息.因为需要在另一个函数中引用env变量,所以规范的处理方式是将env变量定义为全局变量。

2.使用方法

在希望返回到的位置调用setjmp, 当检查到一个错误时,则以两个参数调用longjmp函数,第一个就是在调用setjmp时所用的env,第二个参数是具有非0值的val,它将成为从setjmp处返回的值.使用第二个参数的原因是对于一个setjmp可以有多个longjmp。
:在使用longjmp跳转到setjmp中时,程序主动的退出了!相当于抛出一个异常退出!

使用setjmp和longjmp要注意以下几点:
1. setjmp与longjmp结合使用时,它们必须有严格的先后执行顺序,也即先调用setjmp函数,之后再调用longjmp函数,以恢复到先前被保存的“程序执行点”。
2. 不要假设寄存器类型的变量将总会保持不变.在调用longjmp之后,通过setjmp所返回的控制流中,程序中寄存器类型的变量将不会被恢复。 寄存器类型的变量一般都是临时变量,在C语言中,通过register定义,或直接嵌入汇编代码的程序。
3. longjmp必须在setjmp调用之后,而且longjmp必须在setjmp的作用域之内.

最新文章

  1. linux中inode、软链接、硬链接
  2. js-d3画图插件
  3. 【leetcode】Minimum Size Subarray Sum(middle)
  4. HM必修3
  5. 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
  6. IOS AFNetworking简介及使用
  7. Max Sub-matrix
  8. Spring Ioc知识整理
  9. C++ 包含头文件 和 宏的使用 和 条件编译
  10. Windows下让Git记住用户名密码(https)
  11. Android ListView 单条刷新方法实践及原理解析
  12. 存储容量和IOPS的关系
  13. cssie7.0兼容
  14. nagios系列(七)nagios通过自定义脚本的方式监控mysql主从同步
  15. python+requests接口自动化完整项目设计源码(一)
  16. 【WePY小程序框架实战二】-页面结构
  17. 【搜索】POJ-3009 DFS+回溯
  18. linux性能系列--cpu
  19. P4098 [HEOI2013]ALO 可持久化01Trie
  20. css属性值语法解读

热门文章

  1. 刷题总结——蚯蚓(NOIP2016DAY2T2)
  2. 阿里 AndFix 热修复框架简介
  3. 【基础操作】FFT / DWT / NTT / FWT 详解
  4. 【SDOI2018】战略游戏(同时普及虚树)
  5. HashMap构造函数有哪些
  6. bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
  7. Linux(9):期中架构(1)--- 集群构架 & 备份服务
  8. 团伙(codevs 2597)
  9. 理解 virbr0
  10. ajax 提交数组,mybatis 数组接受