ASSERT一般称为断言,它是一个调试程序经常使用的宏。
ASSERT定义在头文件<assert.h>头文件中,通常对于程序中出现了非法数据,在程序运行时计算括号内表达式的值。如果表带是的值为false(0),程序报告错误,终止运行,以免导致后续严重错误;如果表达式的值不为0,则继续执行后面的语句。特别说明ASSERT()捕获的时非法情况,而非错误情况,错误情况是必然存在的,并且一定需要作出相应的处理,而非法情况则不是,它可能只是个漏洞而已。
用法如下:
ASSERT(n!=0);
k=10/n;
需要注意,ASSERT只在debug版本中有,编译的release版本则被忽略,还有一个需要注意的是:ASSERT()与assert()的区别,ASSERT()是一个宏,而assert()是ANSIC标准中规定的函数,它与ASSERT()的功能类似,但是可以用在release版本中。
使用ASSERT()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include
#include<stdio.h>
#define NDEBUG
#include<assert.h>
...
assert()函数注意事项:
- 每个assert()一般只检验一个条件,而不对多个条件进行检验,因为同时检验多个就无法确定到底是哪个出了毛病。
- 不能使用改变环境的语句,因为assert只在DEBUG时生效,如果这么做会使程序在真正运行时出现问题。例如assert(i++<100)就是错误的,i=100时,该语句不会执行,i++就不会执行。正确写法应该是assert(i<100);i++.
- 并非所有assert()都能代替过滤条件,对于有些地方,assert()无法达到条件过滤的目的。