c语言static jmp buf,c语言的jmp_buf函数?_務酒者的博客-程序员信息网

技术标签: c语言static jmp buf  

e643ae214b55fab93afd48e0880fab24.png

ibeautiful

setjmp与刺激的abort()和exit()相比,goto语句看起来是处理异常的更可行方案。不幸的是,goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意地点(当然,除非你的所有代码都在main体中)。为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部标号和goto作用。头文件申明了这些函数及同时所需的jmp_buf数据类型。原理非常简单:1.setjmp(j)设置“jump”点,用正确的程序上下文填充jmp_buf对象j。这个上下文包括程序存放位置、栈和框架指针,其它重要的寄存器和内存数据。当初始化完jump的上下文,setjmp()返回0值。2. 以后调用longjmp(j,r)的效果就是一个非局部的goto或“长跳转”到由j描述的上下文处(也就是到那原来设置j的setjmp()处)。当作为长跳转的目标而被调用时,setjmp()返回r或1(如果r设为0的话)。(记住,setjmp()不能在这种情况时返回0。)通过有两类返回值,setjmp()让你知道它正在被怎么使用。当设置j时,setjmp()如你期望地执行;但当作为长跳转的目标时,setjmp()就从外面“唤醒”它的上下文。你可以用longjmp()来终止异常,用setjmp()标记相应的异常处理程序。在你举得代码中,第一次运行到if(setjmp(buf)!=0) 时,setjmp(buf)设置了一个GOTO点,然后返回值为0, 所以不进入if,然后继续运行到longjmp(buf , 1);这个时候会跳到setjmp(buf)处,同时返回longjmp的第二个参数值,即1. 此时if判断成立,就输出b,值为5,退出程序。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42525343/article/details/117163870

智能推荐

纤亿通教DAC线缆与AOC光缆,数据传输中该如何选择?_波分传输_纤亿通的博客-程序员信息网

近些年来,数据中心的高速发展,厂商、用户对于数据传输数据的增大,DAC线缆和AOC光缆作为一种替代光模块的低成本高效益的高速数据通信解决方案被越来越多使用。而这两者之间的选择会对整个网络数据中心的架构带来不同的影响。本文将从DAC线缆和AOC光缆之间的对比出发,告诉您在数据传输中该如何选择?一、DAC线缆的优势特点DAC高速线缆(Direct Attach Cable)一般译为直接电缆、直连铜缆或高速电缆,其定义是一种替代光模块的低成本短距离连接方案,高速线缆两端...

玄宇说:JQ实现限制字数替换“…”_冰唐玄宇的博客-程序员信息网

多说无用上图为准$(document).ready(function(){ //限制字符个数 $(".zishu").each(function () { //限制字符为50个 var maxwidth=50; //当前文本大于字数 if($(this).text().le

Java取绝对值_普通网友的博客-程序员信息网

在Java中可以使用Math.abs()方法来方便的进行绝对值计算,例如: int value = Math.abs(-90); System.out.println(value); // 90 public static int abs(int a) { return (a < 0) ? -a : a; }当输入的是正数的时候直接返回即可,当是负数的时候返回它的相反数即可。使用三目运算符可以使用一行代码就能做到。如果需要输入Do

【JSP入门】只知道HTML却不知道JSP?_abcccccccccccccccode的博客-程序员信息网

JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而==动态生成== HTML、XML 或其他格式文档的Web网页的技术标准。

Elasticsearch 默认分词器和中分分词器之间的比较及使用方法_坦GA的博客-程序员信息网

原文地址:https://segmentfault.com/a/1190000011065897 介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够...

Linux系统各个版本 区别_码不停Ti的博客-程序员信息网

debian, 适合系统管理和运维 ubuntu 安装简单,界面友好,社区活跃。 kali 就适合做网络安全方面的操作 deepin 国产的深度发行版,界面做的非常好看 centos 服务器 gentoo 深入底层,透明

随便推点

Java Lambda_托马斯小火车喷雾又喷烟,一直喷,喷喷喷.的博客-程序员信息网

Java LambdaJava Lambda 筛选 filterJava Lambda 截断流 limitJava Lambda 去重流 distinctJava Lambda 跳过流 skipJava Lambda 映射 mapJava Lambda 映射扁平化流 flatMapJava Lambda 查找 findAny findFirstJava Lambda 匹配 anyMatch allMatch noneMatchJava Lambda 归约 reduce

原生php往word文件对应位置写入值 , 并实现预览和下载功能(超实用)_小熊爱芒果的博客-程序员信息网_php把变量写入word模板

文件预览的效果图(附带导出pdf文件和打印功能):实现方式如下:1.打开模板word文件 , 在对应地方打上书签;2.在php.ini中加上   extension=php_com_dotnet.dll ;  目前只支持windows系统3.代码如下  用数组来记录书签和表字段的对应关系  如果经常变动也可以用数据库来记录 'PROJECT_MAP' => ...

Understanding Photometric and Radiometric units and their application to computer graphics_aa20274270的博客-程序员信息网

参考:http://mentalraytips.blogspot.com/2007/03/understanding-photometric-and.htmlUnderstanding Photometric and Radiometric units and their application to computer graphicsOr: "Ho

Python中对字符串长度有要求吗?_weixin_44653724的博客-程序员信息网_python文本分类对长度有要求吗

如果给定一个变量a,且a为字符串类型,对a的长度有限制吗?eg:a = ‘hello’在此a的长度有限制吗?欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准...

向上取整⌈⌉ 和 向下取整⌊⌋ 和四舍五入_猴子姑娘呀的博客-程序员信息网_向下取整和四舍五入的区别

在网上看到这篇写的不错的,不过有点乱,特意整理了一下转载过来向下取整的运算称为Floor,用数学符号⌊⌋表示;向上取整的运算称为Ceiling,用数学符号⌈⌉表示。例如:⌊59/60⌋=0⌈59/60⌉=1⌊-59/60⌋=-1⌈-59/60⌉=0向上向下 取整函数数只会对小数点

Centos5.5 安装Tesseract-OCR_weixin_34269583的博客-程序员信息网

为什么80%的码农都做不了架构师?>>> ...

推荐文章

热门文章

相关标签