标准C库提供了一个名为assert(见assert.h)的宏指令,以确保给定表达式计算的值是一个非零值;如果值为0,就会打印出一条错误信息,同时程序的执行就会被终止。断言使用方便,并为开发者提供了一个强有力的实现级文档工具。断言语句就像是处于活动状态的注释——它们不仅可以使一个假设清晰、准确,可是如果违反了这些假设,它们实际上还会有所行动。
断言语句的使用可以有效地捕获程序运行时的逻辑错误,而且它们很容易从产品代码中滤除。一旦开发工作完成,只需通过在编译期间定义预处理符号NDEBUG,就可以将这些为测试代码错误而添加的冗余代码消除。然而,必须记住的是,放在assert中的代码将会在成品中被遗漏掉。请看下面这个String类的部分定义:
如果assert宏指令的表达式参数影响了软件的状态(正如以下代码那样),那么产品版本就会展示不同的行为。
我们可以确保断言中的代码完全独立于对象的常规操作,以避免这些问题的出现。
这种处理容错技术的普遍做法就是抛出一个像CodingError之类的异常。在这种方式中,将由软件在较高层次上捕获并处理该问题。对于编程错误,在缺少处理程序的情况下,默认的行为就简化为一个断言。