-
是什么
断言(assertion)是 C 语言中常用的防御式编程方式,减少编程错误。最常用的是在函数开始的地方,检测所有参数。有时候也可以在调用函数后,检查上下文是否正确。
C 89 assert这个宏在<assert.h>
中,c99在<cassert>
,提供断言功能。当程序以 release 配置编译时(定义了 NDEBUG 宏),assert() 不会做检测;而当在 debug 配置时(没定义 NDEBUG 宏),则会在运行时检测 assert(cond) 中的条件是否为真(非 0),断言失败会直接令程序崩溃。 -
需要注意什么
由于在release 版本中,assert不被执行,千万不要在assert中加入有副作用的代码。
错误!!
assert(a++ != 1);
- 什么时候用assert,什么时候处理异常
assert用来防御程序员的代码编写错误,如传入正确的参数这是由程序员负责的:
//处理1~10的情况
void handle_one_to_ten(int num){
assert(num<10 && num>0);
...
}
程序员无法控制的运行时错误应该用异常处理,如服务器连接失败,内存分配失败等。