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

  • 相关阅读:
    TensorFlow中使用GPU
    C++内存管理与注意事项
    深入理解Transformer及其源码
    Dropout原理与实现
    指针生成网络(Pointer-Generator-Network)原理与实战
    深度学习中的优化算法总结
    Hadoop伪分布式搭建
    集成学习总结
    模型评估
    基于Spring AOP实现的权限控制
  • 原文地址:https://www.cnblogs.com/itit/p/3439648.html
Copyright © 2011-2022 走看看