C/C++ assert()
C/C++ assert()
assert()
#include<assert.h> //head
void assert( int expression );
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式。
- 如果表达式为 FALSE (0), 程序将报告错误,调用库函数
abort()并终止执行。 - 如果表达式不为 0,则继续执行后面的语句。
- 这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。
- 在调试结束后,可以通过在包含
#include <assert.h>的语句之前插入#define NDEBUG来禁用assert调用
#include <stdio.h>
#define NDEBUG
#include <assert.h>
- 每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
//一般
assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
//优化
assert(nOffset >= 0);
assert(nOffset+nSize <= m_nInfomationSize);
- 不能使用改变环境的语句,因为
assert只在DEBUG生效
assert(i++<100);
//如果出错,如果i=100,i++就不会执行
ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。
比较好的在程序中使用assert的地方:
空指针检查
-
例如,针对一个函数的参数进行空指针检查。你可以这样使用:
assert (pointer != NULL); //产生的错误会像这样 //output Assertion ‘pointer != ((void *)0)’ failed //出现空指针时,程序退出,并给出错误信息
检查函数参数的值
-
例如,如果一个函数只能在它的一个参数foo为正值的时候被调用,你可以在函数开始时这样写:
assert (foo > 0); //检测函数的错误使用

浙公网安备 33010602011771号