防御性编程是提高软件质量技术的有益辅助手段,它的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。防御性编程关键在于严格的输入检查、预期的错误处理方法。下面介绍使用断言来进行防御性编程。
断言通常是一个例程(routine)或一个宏(macros),断言通常包含有两个参数:布尔表达式和消息。布尔表达式的反面是一个错误,C标准库提供了一个assert宏,它只带有一个参数,如:
assert(1==0);
//注意布尔表达式不用加引号
使用assert宏,需要包含头文件cassert或assert.h,执行上述语句的结果是程序结束运行,并弹出对话框显示出错信息。
我们可以自定义assert宏,有两个目的:
1)新增参数。例如新增一个消息参数,使assert宏输出更为丰富的信息;
2)改变assert的行为内容。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, message)
#endif
使用断言应注意的问题:
1)对非预期错误使用断言。非预期错误包括空指针、输入或输出的参数值不在预期范围内、数组的越界等;
2)不要把需要执行的代码放入断言中。断言用于软件的开发和维护,通常不在发行版本中包含断言。把需要运行的代码放入断言中,在发行版本中这些代码通常不会被执行;
3)对来源于内部系统的可靠数据使用断言,而不要对外部不可靠数据使用断言,对于外部不可靠数据应该使用错误处理代码。
分享到:
相关推荐
阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、 Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程、模块、面向对象编程、执行环境等...
对于想将Java应用于实际项目中的程序员来说,《Java核心技术——基础知识》修订版是一本权威性的指导书籍。对于Java SE 6平台的全部更新,这本实用的教程和可靠的参考书通过大量测试过的示例说明了最重要的语言特性...
断言是一种简单而有效的方法,可以在代码中添加一些额外的检查,以确保代码的正确性。 Python 中的断言语句使用 assert 关键字。assert 语句用于检查一个条件是否为真。如果条件为假,则会引发 AssertionError 异常...
断言Vuex状态Assertion for Vuex state
06_类型断言-联合类型-交叉类型
Package assert is a Basic Assertion library used along side native go testing
断言-相容模型检测,陈振宇,丁德成,过去二十年,模型检测已经成为最有前景和最为强大的自动验证方法之一。本文阐述了一种称为AC(断言-相容)模型检测的新方法,对�
断言是一种简单而有效的方法,可以在代码中添加一些额外的检查,以确保代码的正确性。 Python 中的断言语句使用 assert 关键字。assert 语句用于检查一个条件是否为真。如果条件为假,则会引发 AssertionError 异常...
Selenium-java断言(90)【2021-02-02】.docx
接口测试-postman-添加断言
jmeter3实现返回json串的断言,将 jmeter-plugins-json-2.3.jar 复制到lib/ext/.
第1部分 python核心 第1章 欢迎来到python世界 1.1 什么是python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1.3.5 可移植性 1.3.6...
第1部分 python核心 第1章 欢迎来到python世界 1.1 什么是python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1.3.5 可移植性 1.3.6...
第1部分 Python核心 第1章 欢迎来到Python世界 1.1 什么是Python 1.2 起源 1.3 特点 1.3.1 高级 1.3.2 面向对象 1.3.3 可升级 1.3.4 可扩展 1.3.5 可移植性 1.3.6...
jmeter3实现返回json串的断言jmeter-plugins-json,喜欢的可以拿走,同时欢迎大家围观。
1-assert(断言).pdf
OCJP认证-3期(PX017) 面向对象程序设计-断言.doc 学习资料 复习资料 教学资源
防御式编程 Defensive Programming.PPT完整版(精品课件) 大纲: 保护程序免遭非法输入数据的破坏 断言 错误处理技术 异常 隔离程序 辅助调试代码