之前有看过关于Assert的书,但是不懂得如何去用,最近看别人写的代码有用这个断言(assert),今天自己动手看看如何使用断言。

  断言(assert)的语义如下:如果表达式的值为0(假),则输出错误消息并终止程序的执行(一般还会出现提示对话框,说明在什么地方引发了assert);如果表达式为真,则不进行任何操作。因此断言失败就表明程序存在一个bug.

  C++/C 的宏assert(expression)就是这样的断言,当表达式为假时,调用库函数abort()终止程序。

  程序一般分为Debug版本和Release版本,前者用于内部调试,后者用于发行给用户使用。由于 assert(expression)的宏体全部被条件编译为伪指令#ifdef _DEBUG和#endif所包含,因此assert(expression)只在Debug版本里有效

assert(expression)例子:

  1. 在函数的入口处,建议使用断言来检查参数的有效性(合法性)

#define byte unsigned char
void *memcpy(void *pvTo, const void *pvFrom, size_t size)
{
  //使用断言,防止pvTo 和 pvFrom 为NULL
assert((pvTo != NULL)&&(pvFrom != NULL));
byte *pbTo = (byte*)pvTo;
byte *pbFrom = (byte*)pvFrom;
while(size-- > )
{
*pbTo++ = *pbFrom++;
}
return pvTo;
}

 

最新文章

  1. 如何在网页端启动WinForm 程序
  2. Regional Changchun Online--Alisha’s Party
  3. 详解android.mk-2016.01.18
  4. maven项目使用mybatis-generator自动生成代码
  5. UVa 1637 (概率) Double Patience
  6. 多线程与网络之JSON和XML数据的解析
  7. 五指CMS发布,主打高性能
  8. Android5.0之NavigationView的使用
  9. Android(java)学习笔记141:各种边距设置
  10. C#后台程序与HTML页面中JS方法互调
  11. Traveling
  12. 一步一步学EF系列【6、IOC 之AutoFac】
  13. TFboy养成记 tensor shape到底怎么说
  14. android AlarmManager讲解
  15. entity cannot be tracked
  16. 测者的测试技术手册:揭开java method的一个秘密--巨型函数
  17. 2018 省选 T1 一双木棋
  18. 如何在Android平台上使用USB Audio设备
  19. XSS事件(一)
  20. SpringBoot中使用mybatis-generator自动生产

热门文章

  1. ASP.net关于C#代码与javaScript函数的相互调用
  2. 打开的IE网页不是最大化的解决方法
  3. iOS 开发之EXC_BAD_ACCESS异常分析
  4. angularjs中ng-attr的用法
  5. gui界面2048小游戏
  6. C/C++中unsigned char和char的区别
  7. css background-position:x% y%
  8. TreeView无刷新获取text及value
  9. 我自己的style
  10. 关于 Delphi 中的Sender和易混淆的概念(转)