博客
关于我
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/

你可能感兴趣的文章
NFS的安装以及windows/linux挂载linux网络文件系统NFS
查看>>
NFS的常用挂载参数
查看>>
NFS网络文件系统
查看>>
NFS远程目录挂载
查看>>
nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
查看>>
NFV商用可行新华三vBRAS方案实践验证
查看>>
ng build --aot --prod生成文件报错
查看>>
ng 指令的自定义、使用
查看>>
nghttp3使用指南
查看>>
Nginx
查看>>
nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
查看>>
nginx + etcd 动态负载均衡实践(二)—— 组件安装
查看>>
nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
查看>>
Nginx + Spring Boot 实现负载均衡
查看>>
Nginx + uWSGI + Flask + Vhost
查看>>
Nginx - Header详解
查看>>
Nginx - 反向代理、负载均衡、动静分离、底层原理(案例实战分析)
查看>>
nginx 1.24.0 安装nginx最新稳定版
查看>>
nginx 301 永久重定向
查看>>
nginx css,js合并插件,淘宝nginx合并js,css插件
查看>>