关闭

assert

642人阅读 评论(0) 收藏 举报
分类:

assert

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。

1概述

及物动词 vt.
1.断言,声称[+that][O2]
She asserted her innocence.
她宣称她是清白的。
He asserted that he was not guilty.
他声明他无罪。
2.维护,坚持;主张拥有
The boss asserted his authority by punishing his employees.
老板靠惩罚雇员来维护自己的权威。
3.显示;确立;声明,维护,宣称

2Assert - 断言在C里的用法

使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。单元测试必须使用断言(Junit/JunitX)。
除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。
使用断言使我们向按契约式设计更近了一步。
集成电路中指为“有效”
集成电路的数据手册中经常出现assert和deassert二个单词,有很多人把assert译成"断言",但是我觉得译为"有效"更为符合实际,deassert译为"无效"。
例如:某数据手册中写道The address line ADD is asserted at time t1 and is deasserteed at time t2.接下来给出的时序图中可以看出,ADD信号在t1时变成高电平,t2时变为低电平.我们可以译为:"地址线ADD在t1时有效,在t2时无效."
也有人说可以把assert译为"置位",deassert译为"清零",但是我认为这样不妥.因为对于低电平有效的信号,assert代表的是清零,而不是置位.例如PXA270的数据资料中有一段话:The external power-control subsystem de-asserts nBATT_FAULT to signal that the main
battery is connected and not discharged.这句话的大意是:nBATT_FAULT引脚是高电平时,表示主电池正常.显然,此处把de-assert译为清零是不对的,而应该译是"无效".
今天在看PXA270数据手册时发现了INTEL对assert和deassert的解释(第40页).解释如下:
assert: Drive a signal to its active voltage level, either high or low.
deassert: Drive a signal to its inactive voltage level, either high or low.

3断言特性

前置条件断言:代码执行之前必须具备的特性
后置条件断言:代码执行之后必须具备的特性
前后不变断言:代码执行前后不能变化的特性

4使用方式

断言只有在Debug模式下才有效,它可以有两种形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人介绍
    个人资料
    • 访问:1828225次
    • 积分:22284
    • 等级:
    • 排名:第316名
    • 原创:80篇
    • 转载:1891篇
    • 译文:1篇
    • 评论:121条
    最新评论