博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C与C++的错误处理
阅读量:5143 次
发布时间:2019-06-13

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

  通过函数的返回值表示错误,之前已经大量使用过这种方法。这种方法因为有return,函数的右括号会被执行,对象可以正确地被析构。但是这种方法需要层层判断返回值,流程非常繁琐。在UnixC的源代码中,经常是返回值判断的代码比运行的代码还要多。

  通过setjmp/longjmp远程跳转。C中的函数,一般是调用一次返回一次,而setjmp比较特殊,是调用一次,返回两次。longjmp也比较特别,是从一个函数是调用,而从另一个函数里返回。这两个函数相互配合,构成远程跳转,实现C中的错误集中处理。第一次调用setjmp时,会将进入函数时的环境信息,包括系统堆栈保存到一个jmp_buf缓冲区中,并返回0。进程继续。调用longjmp时会将保存的调用栈恢复到当前调用栈,将返回一个非0的数字,这个非0的数据就是setjmp的第2次返回值。(因为setjmp第1次返回0,故longjmp不能返回0)。这种方法不用逐层判断返回值,并能集中处理错误,使流程简化。这种方法在C中比较适用。而在C++中,因为longjmp从setjmp中返回,调用函数的右花括号不会被执行,调用函数中的局部变量的析构函数都不会被执行。

  C++中的异常处理,集中了以上两种方式的优点,既能集中处理错误,避免层层判断,也能保存局部变量被析构。

转载于:https://www.cnblogs.com/itit/p/3439648.html

你可能感兴趣的文章
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
构造者模式
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
jQuery on(),live(),trigger()
查看>>
Date Picker控件:
查看>>
你的第一个Django程序
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>