1-1 传统的错误处理
1.1 传统的错误处理
本书说明
-
debug
模式下,使用assert
来进行开发时调试,在发布时通过#define NDEBUG
来使其失效。 -
运行时错误处理采用
require.h
中定义的assure
和require
函数。
1. C语言中的错误处理方式
-
函数中返回错误信息
- 问题:错误检查冗长乏味
-
鲜为人知的C库信号处理系统,即signal函数和raise函数
- 问题:项目中代码耦合度过高,不同库的信号值可能会发生冲突
-
C库的非局部跳转函数:setjmp和longjmp
- 问题:在C++中跳出作用域时,不会调用析构函数,非常危险。
一个setjmp和longjmp的演示程序
本程序演示了setjmp和longjmp的运作流程:先调用一次setjmp,再使用oz函数创建一个对象,其中使用longjmp跳回setjmp的if判断,并证明了对象不被析构(goto也是如此)。接着返回值变为47,进入else。
|
发布于