2022年防御式编程 .pdf
《2022年防御式编程 .pdf》由会员分享,可在线阅读,更多相关《2022年防御式编程 .pdf(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、防御式编程防御式编程是提高软件质量技术的有益辅助手段。防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。1. 在非法输入(Invalid Inputs )中保护你的程序一个好程序,在非法输入的情况下,要么什么都不输出,要么输出错误信息。有几种方法来防止非法的输入:( 1)检查来自于外部资源(external sources )的所有数据的值,例如来源于网络的数据的值,来源于文件的数据的值。检查的目的是保证数据值在一个允许的范围内。( 2)检查每一个例程(routine )的输入参数值。一旦非法输
2、入被发现,那么应该根据情况进行处理。防御式编程的最佳的形式是在一开始就不引入错误。2. 断言( Assertions)一个断言通常是一个例程(routines )或者一个宏(marcos )。每个断言通常含有两个参数:一个布尔表示式(a boolean expression)和一个消息(a message )。一个布尔表达式的反面表示了一个错误。C 标准库提供了一个assert 宏,它只带有一个参数,用法如下:assert(1 = 0); / 注意boolean expression 不要加引号使用assert 宏,需要包含头文件cassert 或者assert.h ,执行上面语句的结果是程序
3、终止运行,输出与下面消息类似的消息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - Assertion failed: 1 = 0, file 我的文档visual studio projectslearningassertassert.cpp, line 9 通常来说,我们会定义自己的assert 宏,其目的有两个:( 1)新增参数,例如新增一个消息参数,使得assert 宏输出更为丰富的信息。(2)改变assert 的行为内
4、容。C 标准库中的assert 宏将中断程序,实际上,我们可以让程序继续运行而不中断或者进入调试状态等,另外还可以控制消息输出的目标,即控制消息是输出到控制台还是文本文件,甚至是通过网络发出。下面是一个C+ 实现的断言:#ifdef _DEBUG #define Assert(exp, message) if (!(exp) std:cout Assertion failed: #exp n Message: message n line: _LINE_ n file: _FILE_ n; exit(EXIT_FAILURE); #else #define Assert(exp, messag
5、e) #endif 执行Assert(1 = 0, Error); 结果为:Assertion failed: 1 = 0 Message: Error 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - line: 24 file: 我的文档 visual studio projectslearningassertassert.cpp 使用断言应该注意一下的几个问题:1)对非预期错误使用断言断言中的布尔表达式的反面一定要描述一个非
6、预期错误,下面所述的在一定情况下为非预期错误的一些例子:( 1)空指针。( 2)输入或者输出参数的值不在预期范围内。( 3)数组的越界。非预期错误对应的就是预期错误,我们通常使用错误处理代码来处理预期错误,而使用断言处理非预期错误。在代码执行过程中,有些错误永远不应该发生,这样的错误是非预期错误。断言可以被看成是一种可执行的注释,你不能依赖它来让代码正常工作(Code Complete 2)。例如:int nRes = f(); / nRes 由f 函数控制,f 函数保证返回值一定在-100 100 Assert(-100 = nRes & nRes = 100); / 断言, 一个可执行的注
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年防御式编程 2022 防御 编程
限制150内