断言ASSERT()是什么(宝典笔记)

ASSERT()一般被称为断言,它是一个调试程序常用的宏。它定义在<assert.h>头文件中,通常用于判断程序中是否出现了非法的数据,在程序运行时它计算括号内的表达式的值,如果表达式的值是false(0),程序报告错误,终止运行。以免导致严重后果,同时也便于查找错误;如果表达式的值不为0,则继续执行后面语句。再次强调一点,ASSERT()捕获的是非法情况,而非错误情况,错误情况是必然存在的,并且一定需要作出相应的处理,而非法情况则不是,它可能只是漏洞而已。

其用法如下:

    ASSERY(n != 0);

    k = 10/n;

需要注意的是

1、ASSERT()只在Debug版本中有,编译的Release版本则被忽略。

2、ASSERT()和assert()是不一样的,ASSERT()是宏,而assert是ANSIC标准中规定的函数,它与ASSERT()的功能类似,但是可以应用在Release版本中。


assert()

缺点:频繁的调用会极大的影响程序的性能,增加额外的开销。

措施:可以通过在包含#include<assert.h>的语句之前插入#define NDEBUG 来禁用assert()调用

使用注意:

(1)在函数开始处检验传入参数的合法性。如:

assert(nNewSize >= 0);

(2)每个assert()一般只检验一个条件,而不对多个条件进行检验,因为同时检验多个条件时,如果断言失败,则无法直观的判断是哪个条件失败。

(3)不能使用改变环境的语句,因为assert只在DEBUG时生效,如果那么做,会是程序在真正运行时遇到问题。

(4)并非所有的assert()都能代替过滤条件,对于有的地方,assert()无法达到条件过滤的目的。

(5)一般在编程的时候,为了形成逻辑和视觉上的一致性,会将assert()与后面的语句之间空一行来隔开。

猜你喜欢

转载自blog.csdn.net/summer00072/article/details/80835261