断言assert

断言的强大怎么高估都不过分。可以把assert 看成一个在任何系统状态下都可以安全使用的无害测试手段。

在MFC中为ASSERT宏。

用法: assert (表达式);   assert会检查表达式的结果,如果表达式不成立会中止程序弹出一个对话框,提示断言错误的位置,点击重试按钮会进入程序中断言的位置。

断言一般只会在调试模式下生成代码(在NDEBUG宏没有被定义时),在发行版本中它们是不存在的。所以尽管用ASSERT进行检查好了。

断言使用的原则:

1.      不要在assert语句中编写有副作用的表达式,如:

assert ( ++ i<limit )               //糟糕:i在调试模式下才递增

2.      避免使用assert(false),应该使用assert(“informatonal message”); 大多数编译器会在错误输出设备中发送这个字符串,这样可以取代注释,如:

assert(month> 0 && monnth < 13 && "月份不在范围之内!");

3.      不要使用断言报告运行时的错误,如:不要用assert确保malloc成功执行,窗口成功创建或者线程成功启动等。但是可以用assert确保API函数的执行符合文档的记载。总而言之:我们知道有些错误是可能会发生的,有些是错误是不应该发生的是非法的。前者大多为运行时错误可以用异常解决。后者发生了就是程序员的过错,此时就应该使用assert。

4.      在函数的开始处检验传入参数的合法性。在此处不要使用条件过滤来检查传入参数。传入参数不合法是不应该发生的行为是调用者的错误,使用断言能很好的发现错误。

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

 

总结:使用assert就是防止“非法的”错误发生,杜绝你认为“不可能发生”的错误发生。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值