Visual C++ 中的断言

 
 断言语句指定在程序的某些特定点应为真的条件。如果该条件不为真,则断言失败,中断程序的执行,并显示“断言失败”对话框。

Visual C++ 支持基于下列构造的断言语句: 

MFC 程序的 MFC 断言。 
使用 ATL 的程序的 ATLASSERT。 
使用 运行时库的程序的 CRT 断言。 
其他 C/C++ 程序的 ANSI assert 函数。 
断言可以用于: 

捕捉逻辑错误。 
检查某操作的结果(检查结果)。 
测试错误条件,这些错误条件应已处理。 
MFC 和 运行时库断言
当调试器由于 MFC 或 运行时库断言而暂停时,它定位到源文件中的断言发生点(如果源可用)。断言消息显示在“输出”窗口以及“断言失败”对话框中。如果希望保存断言消息以供将来参考,可以将断言消息从“输出”窗口复制到某个文本窗口。“输出”窗口可能还包含其他错误信息。请仔细检查这些消息,因为它们提供了有关确定断言失败原因的线索。

通过在代码中大量使用断言,可以在开发期间捕捉许多错误。为所做的每个假定编写一个断言是很好的规则。例如,如果假定某个参数不为 NULL,请使用一条断言语句检查该假定。

_DEBUG
仅当定义了 _DEBUG 时断言语句才编译。未定义 _DEBUG 时,编译器将断言作为空语句处理。因此,断言语句在最终发布程序中系统开销为零;可以在代码中大量使用断言语句,而不影响“Release”版本的性能,并且不必使用 #ifdef。

使用断言的副作用
当向代码添加断言时,请确保这些断言没有副作用。例如,考虑以下断言:

ASSERT(nM++ 0); -- Don't do this!
因为在程序的“Release”版本中不计算 ASSERT 表达式,所以 nM 在“Debug”版本和“Release”版本中会有不同值。在 MFC 中,可以使用 VERIFY 宏代替 ASSERT。在“Release”版本中,VERIFY 计算该表达式,但不检查结果。

在断言语句中使用函数调用时应特别小心,因为计算函数可能会有意外的副作用。

ASSERT myFnctn(0)==1 –- unsafe if myFnctn has side effects
VERIFY myFnctn(0)==1 –- safe
VERIFY 在“Debug”版本和“Release”版本中都调用 myFnctn,因此使用它较安全。但在“Release”版本中仍会有因不必要的函数调用而产生的系统开销。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值