Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1541048
  • 博文数量: 237
  • 博客积分: 5139
  • 博客等级: 大校
  • 技术积分: 2751
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 14:48
文章分类

全部博文(237)

文章存档

2016年(1)

2012年(4)

2011年(120)

2010年(36)

2009年(64)

2008年(12)

分类: C/C++

2011-01-24 11:30:26

断言:被用来检测代码所作的假设是否正确,如果假设为假,就停止执行代码,也许还会显示一条消息。

  断言并不是产生严重错误,而是允许你指定过程以供断言失败时调用。帮助侦测出无效状态或者是错误的程序逻辑。

  当断言失败时,总是应该抛出一个严重错误。

  一、_ASSERT_DEBUG

  _ASSERT_DEBUG断言可以在开发的早期阶段加入,以强调程序错误,也可以等到维护和重构时加入,以验证代码行为符合“基于契约的设计”。

  用例:

  void CTestClass::TestValue(TInt aValue)

  {

  #ifdef _DEBUG

  _LIT(KPanicDescriptor,"TestValue");

  #endif

  _ASSERT_DEBUG((aValue>=0),User::Panic(KPanicDescriptor,KErrArgument));

  //如果条件为假,代码将被一个严重错误停止执行(使用Panic)。

  ...

  }

  有一个轻量级的,匿名的断言,它会调用隐藏的Panic:

  ASSERT(aValue>=0);

  二、_ASSERT_ALWAYS

  在发布版本中使用,但不多,因为断言会中止代码执行,使库发生严重错误,应尽可能避免。

  可以使用if语句来检测输入值,并在出错时返回错误代码。

  针对调用代码的无效输入,使用防御性编码技术(if语句)来保护你的函数,_ASSERT_ALWAYS应该被用来保护只有调用者的bug(如数组下标越界)才能造成的非法输入。

阅读(818) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-08 12:46:07

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com