Skip to content

Latest commit

 

History

History
52 lines (41 loc) · 1.97 KB

41_程序的错误处理.md

File metadata and controls

52 lines (41 loc) · 1.97 KB

错误的种类

第一类:语法错误

例如:括号不匹配,多或少分号,等等。 对于此类错误,慢慢调试吧。

第二类:程序可以直接处理的错误

对于此类错误,直接有约定的处理方式。 例如:程序需要从配置文件读入配置信息,如果配置文件不存在,直接使用默认配置,等等。

第三类:程序无法处理的错误

具体可分为:

  • 调用者的错误,例如:指针参数为空,索引超出范围,矩阵不匹配,等等
  • 内存错误,例如:new 返回 nullptr,等等
  • 其它函数错误等等

对于此类错误:

  • 如果是自己使用 或者 自己团队使用,直接退出即可
  • 如果是封装成库让别人使用,应该抛出异常 或 返回错误代码,让用户自己看情况处理

对于调用者的错误,有时,出于效率等的考虑,也可以不处理此类情况,例如:strcpy() 等等

异常 和 错误代码的优缺点

异常:

优点

  • 异常可以自动向上层栈传递
  • 除非手动忽略,否则,必须处理所有异常
  • 异常不会占据参数 或 返回值
  • 异常可以携带更多的信息
  • 可以在构造函数中抛出异常
  • 可以使用面向对象构建自己的异常体系
  • 异常类型是强类型的,int 不会匹到 double
  • 不发生异常时,额外的时间开销几乎为零

缺点

  • 会有一些空间开销

错误代码

优点:

  • 没有额外的时间 和 空间开销

缺点:

  • 必须手动检测函数是否出错,如果漏掉某一个,可能导致程序带错误运行
  • 检测每一个出错的函数很麻烦
  • 错误代码会占据函数的返回值,而有的函数的返回值有约定,比如,赋值运算符
  • 错误代码,只能说明,函数出错,不能说明是出了什么错误
  • 无法处理构造函数的错误

所以: 个人建议,使用异常而不是错误代码

参考资源