ASSERT()是什么
ASSERT()
一般被称为断言,是一个调试程序时经常使用的宏。它被定义在<assert.h>
头文件中,通常用于判断程序中是否出现了非法的数据,在程序运行时,它计算括号内的表达式的值。如果表达式的值为false(0),则程序报告错误,终止运行;如果不为0,则继续执行后面语句。
例如:
ASSERT(n != 0);
k = 10/n;
ASSERT()与assert()
-
ASSERT()
只在Debug版本中有,在Release版本中则被忽略 -
ASSERT()
是宏,而assert()
是ANSIC标准中规定的函数,它与ASSERT()
的功能类似,但是可以应用在Release版本中。
assert()的缺点
频繁地调用会极大地影响程序的性能,增加额外开销。在调试结束后,可以通过在包含#include <assert.h>
的语句之前插入#define NDEBUG
来禁用assert()
调用。
assert()使用的注意事项
-
在函数开始处检验传入参数的合法性
-
每个
assert()
一般只检验一个条件,而不对多个条件进行检验,因为当同时检验多个条件时,如果断言失败,则无法直观地判断是哪个条件失败 -
不要使用
assert()
作为实现函数逻辑的语句,因为assert()
一般在Release版本中,就禁用了 -
并非所有的
assert()
都能代替过滤条件,对于有的地方,assert()
无法达到条件过滤的目的 -
一般在编程的时候,为了形成逻辑和视觉上的一致性,会将
assert()
与后面的语句之间空一行隔开