zoukankan      html  css  js  c++  java
  • C与C++的错误处理

      通过函数的返回值表示错误,之前已经大量使用过这种方法。这种方法因为有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++中的异常处理,集中了以上两种方式的优点,既能集中处理错误,避免层层判断,也能保存局部变量被析构。

  • 相关阅读:
    解决“ 故障模块名称: clr.dll ”
    关于阿里云专有网络搭建FTP服务器的深坑
    电脑异常断电,IDEA崩溃
    Winform 出现“Win已停止工作”解决方法
    C# WinForm控件、自定义控件整理(大全)
    cmd获取管理员权限等
    检测笔记本电池状态
    单片机
    常用工具、焊接技术
    元器件
  • 原文地址:https://www.cnblogs.com/itit/p/3439648.html
Copyright © 2011-2022 走看看