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

  • 相关阅读:
    MVC ORM 架构
    Kubernetes 第八章 Pod 控制器
    Kubernetes 第七章 Configure Liveness and Readiness Probes
    Kubernetes 第六章 pod 资源对象
    Kubernetes 第五章 YAML
    Kubernetes 核心组件
    Kubernetes 架构原理
    Kubernetes 第四章 kubectl
    Kubernetes 第三章 kubeadm
    yum 配置及yum 源配置
  • 原文地址:https://www.cnblogs.com/itit/p/3439648.html
Copyright © 2011-2022 走看看