博客
关于我
c语言中的setjmp和longjmp简介
阅读量:367 次
发布时间:2019-03-04

本文共 799 字,大约阅读时间需要 2 分钟。

setjmp将当前程序的运行环境存储在一个jump_buf类型的全局变量中(因为后续要被longjmp调用)

第一次调用setjmp的返回值是null

中后续的代码中执行到longjmp以后,longjmp需要两个参数,一个是之前setjmp保存到运行环境的全局变量可以调整到setjmp函数

另一个参数是setjmp函数的返回值,然后程序执行会跳转到setjmp函数并返回longjmp的第二个参数

通常应将setjmp放在各种条件控制语句中if switch while等

一个例子,参考dash文档

Example

#include 
#include
#include
  jump_buffer; noreturn void a(int count) { ("a(%d) called\n", count); (jump_buffer, count+1); // will return count+1 out of setjmp} int main(void){ volatile int count = 0; // modified local vars in setjmp scope must be volatile if (setjmp(jump_buffer) != 9) // compare against constant in an if a(count++);}

Output:

a(0) calleda(1) calleda(2) calleda(3) calleda(4) calleda(5) calleda(6) calleda(7) calleda(8) called

转载地址:http://pabg.baihongyu.com/

你可能感兴趣的文章
MySQL索引背后的数据结构及算法原理
查看>>
mysql索引能重复吗_mysql “索引”能重复吗?“唯一索引”与“索引”区别是什么?...
查看>>
MySQL索引详解(IT枫斗者)
查看>>
MySQL索引那些事:什么是索引?为什么加索引就查得快了?
查看>>
Mysql索引(2):索引结构
查看>>
Mysql索引(3):索引分类
查看>>
Mysql索引(4):索引语法
查看>>
mysql级联删除_Mysql笔记系列,DQL基础复习,Mysql的约束与范式
查看>>
mysql练习语句
查看>>
mysql经常使用命令
查看>>
MySQL经常使用技巧
查看>>
mysql给账号授权相关功能 | 表、视图等
查看>>
MySQL缓存使用率超过80%的解决方法
查看>>
Mysql缓存调优的基本知识(附Demo)
查看>>
mysql编写存储过程
查看>>
mysql网站打开慢问题排查&数据库优化
查看>>
mysql网络部分代码
查看>>
mysql联合索引 where_mysql联合索引与Where子句优化浅析
查看>>
mysql联合索引的最左前缀匹配原则
查看>>
MySQL聚簇索引
查看>>