assert(0)的作用

原创 2015年07月08日 15:46:09

今天在看框架例子的代码里,发现很多地方没有做什么,就只是错误检查,然后后面就会跟一个assert(0),比较奇怪这个用意,所以特意差了一下记录在这里。

定义

assert宏的原型定义在

#include <assert.h>
void assert( int expression );

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

用法总结与注意事项

  1. 在函数开始处检验传入参数的合法性如:
int resetBufferSize(int nNewSize)
{
  //功能:改变缓冲区大小,
  //参数:nNewSize 缓冲区新长度
  //返回值:缓冲区当前长度 
  //说明:保持原信息内容不变     nNewSize<=0表示清除缓冲区
  assert(nNewSize >= 0);
  assert(nNewSize <= MAX_BUFFER_SIZE);
  ...
}

2 . 每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败,如:

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);//不推荐
assert(nOffset >= 0);                                  //推荐
assert(nOffset+nSize <= m_nInfomationSize);

3 . 不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:
错误:

assert(i++ < 100);

这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
正确:

 assert(i < 100);
 i++;

4 . 检查操作的结果。断言对于快速直观地检查不明显的操作结果最有价值。
5 . assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。
6 . 有的地方,assert不能代替条件过滤。

assert(0)作用

本文开始提到的代码中assert(0),assert(0)可能的作用总结如下:
1. 捕捉逻辑错误。可以在程序逻辑必须为真的条件上设置断言。除非发生逻辑错误,否则断言对程序无任何影响。即预防性的错误检查,在认为不可能的执行到的情况下加一句ASSERT(0),如果运行到此,代码逻辑或条件就可能有问题。
2. 程序没写完的标识,放个assert(0)调试运行时执行到此为报错中断,好知道成员函数还没写完。

assert的作用是什么

使用断言 assert()宏是用于保证满足某个特定条件,用法是: assert(表达式); 如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的...
  • zhu1534120216
  • zhu1534120216
  • 2016年07月10日 15:35
  • 2278

c++ assert() 使用方法

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include  void assert( int expression ); assert的作用是现计...
  • yunzhongguwu005
  • yunzhongguwu005
  • 2013年06月27日 09:07
  • 84886

问题: 什么是ASSERT()? ASSERT()和assert()的区别是什么?

ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断...
  • procedurecode
  • procedurecode
  • 2007年12月16日 16:17
  • 2587

注意:assert在release版本中仍可生效

assert在程序的release版本中仍然有效(不要与VC中的ASSERT混淆),要使assert失效,只有在包含assert头文件(assert.h)的语句前定义NDEBUG宏或在编译器参数中添加...
  • yeyuboy
  • yeyuboy
  • 2006年02月07日 16:58
  • 11923

assert()

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用...
  • tanqiuwei
  • tanqiuwei
  • 2014年03月25日 17:28
  • 2002

assert和de-assert的理解

在很多手册中会经常用到assert和de-assert,它不单单是拉高或拉低,而是使能与禁能的意思,解释如下: assert: Drive a signal to its active volt...
  • violet089
  • violet089
  • 2016年12月17日 11:05
  • 885

Assert 和De-assert 意思

经常会在Datasheet看到Assert(Asserting、Asserted),De-assert(Deassert、deasserting、deasserted)等词,如下面这句: Asser...
  • u013256018
  • u013256018
  • 2017年03月22日 15:06
  • 753

assert()函数用法总结

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( int expression );   assert的作用是现计算...
  • qq_32175379
  • qq_32175379
  • 2017年04月21日 11:05
  • 1233

ASSERT函数

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:  #include   void assert( int expression );  assert的...
  • supreme42
  • supreme42
  • 2011年11月28日 23:54
  • 17074

java assert断言的用法

assert关键字是在JDK1.4才被添加,用于程序的调试。用户有两种 1.assert expression expression是逻辑运算表达式,如果expression为true,表示断言成功,...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月07日 10:55
  • 6696
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:assert(0)的作用
举报原因:
原因补充:

(最多只允许输入30个字)