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);
    //检测函数的错误使用
    
posted @ 2022-07-19 21:34  HeadmasterEggy  阅读(54)  评论(0)    收藏  举报