断言(ASSERT)的用法

来源:互联网 发布:台北北投温泉攻略 知乎 编辑:程序博客网 时间:2024/04/27 04:03

1、与if比较

if与assert语句异曲同工

if(假设成立){     程序正常运行;}else{      报错&&终止程序!(避免由程序运行引起更大的错误)  }
但用assert可使程序开销小

2、举例

  int resetBufferSize(int nNewSize)   {   //功能:改变缓冲区大小,   //参数:nNewSize 缓冲区新长度   //返回值:缓冲区当前长度   //说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区   assert(nNewSize >= 0);   assert(nNewSize <= MAX_BUFFER_SIZE); 
若assert(expression)中expression为真,则继续运行,若为假,则报错并调用abort 来终止程序运行

3、注意事项

在函数开始处检验传入参数的合法性(同举例)

每个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(i < 100) 
      i++; 


0 0