断言2016新编assert函数说明

assert函数  时间:2021-02-26  阅读:()

assert

目录[隐藏]

概述

常见的断言特性

断言使用方式

启用断言

何时需要使用断言

什么地方不要使用断言

C里面的函数

[编辑本段]

概述

Assert -断言

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

使用断言可以创建更稳定 品质更好且不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话可以使用断言。单元测试必须使用断言Junit/JunitX 。

除了类型检查和单元测试外断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。

使用断言使我们向按契约式设计更近了一步。

[编辑本段]

常见的断言特性

前置条件断言代码执行之前必须具备的特性

后置条件断言代码执行之后必须具备的特性

前后不变断言代码执行前后不能变化的特性

[编辑本段]

断言使用方式

断言可以有两种形式

1 .assert Expression1

2.assert Expression1 :Expression2

其中Expression1应该总是一个布尔值 Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假则抛出一个AssertionError这是一个错误而不是一个异常也就是说是一个不可控制异常unchecked Exception),AssertionError由于是错误所以可以不捕获但不推荐这样做 因为那样会使你的系统进入不稳定状态。

[编辑本段]

启用断言

断言在默认情况下是关闭的要在编译时启用断言需要使用source1 .4标记既javac source1 .4 Test.java ,在运行时启用断言需要使用-ea参数。要在系统类中启用和禁用断言可以使用-esa和-dsa参数。

例如publ ic class AssertExampleOne{publ ic AssertExampleOne(){}publ ic static void main(String args[]){int x=10;

System.out.println("Testing Assertion that x==100");assert x=100:"Out assertion fai led!";

System.out.println("Test passed!");

}

}

如果编译时未加-source1 .4,则编译通不过

在执行时未加-ea时输出为

Testing Assertion that x==100

Test passedjre忽略了断言的就代码而使用了该参数就会输出为

Testing Assertion that x==100

Exception in thread "main" java. lang.AssertionError: Out assertion fai led!at AssertExampleOne.main(AssertExampleOne.java:6)

断言的副作用

由于程序员的问题断言的使用可能会带来副作用 例如boolean isEnable=false;

//. . .assert isEnable=true;

这个断言的副作用是因为它修改了程序中变量的值并且未抛出错误这样的错误如果不细心的检查是很难发现的。但是同时我们可以根据以上的副作用得到一个有用的特性根据它来测试断言是否打开。publ ic class AssertExampleTwo{publ ic static void main(String args[]){boolean isEnable=false;

//. . .assert isEnable=true;if(isEnable==false){throw new RuntimeException("Assertion shoule be enable!");

}

}

}

[编辑本段]

何时需要使用断言

1 .可以在预计正常情况下程序不会到达的地方放置断言 assert false

2.断言可以用于检查传递给私有方法的参数。 对于公有方法 因为是提供给外部的接口所以必须在方法中有相应的参数检验才能保证代码的健壮性

3.使用断言测试方法执行的前置条件和后置条件

4.使用断言检查类的不变状态确保任何情况下某个变量的状态必须满足。 如age属性应大于0小于某个合适值

[编辑本段]

什么地方不要使用断言

断言语句不是永远会执行可以屏蔽也可以启用

因此

1 .不要使用断言作为公共方法的参数检查 公共方法的参数永远都要执行

2.断言语句不可以有任何边界效应不要使用断言语句去修改变量和改变方法的返回值

[编辑本段]

C里面的函数

函数名: assert

功能:测试一个条件并可能使程序终止

用法: void assert(int test);

程序例:

#include <assert.h>

#include <stdio.h>

#include <stdl ib.h>struct ITEM {int key;int value;

};

/* add item to l ist, make sure l ist is not nul l */void additem(struct ITEM *itemptr) {assert(itemptr != NULL);

/* add item to l ist */

}int main(void)

{additem(NULL);return 0;

}assert()函数用法assert宏的原型定义在<assert.h>中其作用是如果它的条件返回错误则终止程序执行 原型定义

#include <assert.h>void assert( int expression );assert的作用是现计算表达式expression 如果其值为假即为0 那么它先向stderr打印一条出错信息

然后通过调用a b o rt来终止程序运行。

请看下面的程序清单badptr.c

#include <stdio.h>

#include <assert.h>

#include <stdl ib.h>int main( void )

{

FILE *fp;fp = fo pe n( "te st.txt", "w" );//以可写的方式打开一个文件如果不存在就创建一个同名文件assert( f p ); //所以这里不会出错fc lo se( fp );fp = fopen( "noexitfi le.txt", "r" );//以只读的方式打开一个文件如果不存在就打开文件失败

assert( f p ); //所以这里出错fclo se( fp ); //程序永远都执行不到这里来return 0;

}

[root@localhost error_process]# gcc badptr.c

[root@localhost error_process]# ./a.outa.out: badptr.c:14: main: Assertion `fp' fai led.

已放弃

使用assert的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。

在调试结束后可以通过在包含#include <assert.h>的语句之前插入#defineNDEBUG来禁用assert调用示例代码如下

#include <stdio.h>

#define NDEBUG

#include <assert.h>

用法总结与注意事项

1 )在函数开始处检验传入参数的合法性

如:int resetBufferSize(int nNewSize)

{

//功能:改变缓冲区大小,

//参数:nNewSize缓冲区新长度

//返回值:缓冲区当前长度

//说明:保持原信息内容不变nNewSize<=0表示清除缓冲区assert(n NewSize >= 0);assert(nNewSize <= MAX_BUFFER_SIZE);

. . .

}

2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败

不好: assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);

好: assert(nOffset >= 0);assert(nOffset+nSize <= m_nInfomationSize);

3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题

错误: assert(i++ < 100)

这是因为如果出错 比如在执行之前i=100,那么这条语句就不会执行那么i++这条命令就没有执行。

正确: assert(i < 100)i++;

4)asse rt和后面的语句应空一行,以形成逻辑和视觉上的一致感

5)有的地方,assert不能代替条件过滤

注意 当对于浮点数

#include<assert.h>

// float pi=3.14;

// assert(p i=3.14); //float pi=3.14f;assert (pi=3. 14f);

---------------------------------------------------------

在switch语句中总是要有default子句来显示信息(Assert)。int number = SomeMethod();switch(number)

{case 1 :

Trace.WriteLine("Case 1 :");break;case 2:

Trace.WriteLine("Case 2:");break;default :

Debug.Assert(false);break;

}

---------------------------------------------------------------范文最新推荐------------------------------------------------------

电力安全月工作总结

[电力安全月工作总结]电力安全月工作总结2011年3月1 日至3月31 日为我公司的安全生产月 **变电站围绕;夯实基储提高素质、树立标杆、争创一流;的主题开展了丰富多彩、形式多样的具体行动通过看板形式宣传安全第一、预防为主的方针通过48+4的学习机会进行安全生产大讨论通过安全活动进行查找本站的隐患的活动电力安全月工作总结。形成了;人人学会安全层层尽责保证安全;的

良好氛围使我站的安全生产工作又上了一个新的台阶。

本站安全生产月活动具体工作如下

1.开展安全月活动宣传工作大家坐在一起讨论活动的主题、学习实施纲要、讨论各个实施阶段的活动安排。深刻反思11.3事故汲取事故教训每人写了一份11.3事故反思并对本站的安全管理、记录报表、规章制度、培训工作、事故隐患每个值班员都谈了自己的看法和建议对站内管理每个人都倾注了最大的热情可见11.3对每一个值班员的触动是刻骨铭心的安全月的必要开展对变电站各项工作的

促进尤其对值班员安全意识、主人翁精神的影响最为深刻。

2.深入开展安全生产大检查活动。在安全生产整顿周活动的基础上结合秋季安全大检查进一步查摆了本站安全生产的隐患特别是各种规章制度的建立、健全、完善和执行情况对现场运行规程从全面、具体和针对性上进行了修订制定全站停电的反事故预案制定低温天气和防冰闪的反事故措施进行现场演练。 当前正处年底收

---------------------------------------------------------------范文最新推荐------------------------------------------------------

关和人员调整后的敏感时期人员思想浮动大而且本站正在进行新母差与新间隔投运的准备工作施工人员多施工人员安全意识和安全防范技能较低是近阶段我站安全运行的一大隐患我们会同工作负责人一起讨论施工过程中的存在和潜在的危害并有针对性地制定防范了措施保证了施工安全的进行。针对人员素质参差不起安全意识高低不同我们制定了《**站考核细则》制定措施,明确职责和

工作程序对任何可能发生的情况做了充分的准备工作。

3.利用交接-班的时间我们查找本站存在的隐患实行分片分区责任到人对查找到的隐患汇总分析能自己解决的我们都及时认真地消除对我站能力不足不能解决的我们纳入工区的职业安全健康体系 由工区负责解决工作总结《电力安全月工作总结》。该报缺陷的上报缺陷该报危害辨识的报危害辨识使站内所有设备、所有

工作、所有危险点在控、可控、能控。

4.对在本月进行的工作、操作等我们编制事故预案如220KV母差保护更换的准备工作和悬垂刷涂工作 除了工区安排跟踪外站内根据人员新调整、新人员对设备不熟悉的现状三班改为两班加强值班力量 保证了各项工作的顺利完成。 为防止意外发生我

们共同讨论制定出了在工作期间母线故障的反事故预案。

5.每个班利用晚饭后的时间讨论检查了我站在遵章守制方面还存在哪些差距现有规程制度能否满足现场规范化、标准化工作需要并在站内宣读并实施了《**站考核细则》按照个人能力分为12大员管理站内事务规定每个值班员必须按照规章制度工作否则就严格

---------------------------------------------------------------范文最新推荐------------------------------------------------------

考核。在个人专业技能与岗位要求存在的差距站内按人所需制订培训计划建立心智加油站和个人提升计划的培训平台进行培训。工作日志、检修记录、安全活动、安全用具记录、缺陷记录等班组记录已

经和工区进行交流完善纪录格式。

6.对全站值班员进行《电力安全工作规程》、本岗位安全职责、工作中的危险点辨识和防范措施及相关专业的规程制度等的培训选派两名值班员参加工区举办的安规比赛锻炼值班员具备工作所要求的

安全生产技能熟知各项工作的危险点及防范措施

7.完善三票管理制度针对本站实际按照运行工区职业安全健康管理体系实施;三票;管理制度 内容完善 ;三票;按照规定执行严格执行倒闸操作;六关;制度操作准备关、接令关、操作票填写关、核对图板关、操作监护关、质量检查关  ;三票;的填写及执行情况良好。 ;三票;管理制度健全制定了;三票;合格评价标准和考核规定 ;三票;合格评价符合标准要求对发现的问题能及时提出改进措施有记录

可查定期对;三票;的执行情况进行统计、分析和考评。

8.重温《沧州供电公司运行管理标准》及运行相关管理规定。完善我站的《综自站的管理规定》并制定措施严格执行。查找五防系统管理和软件缺陷及时上报并请厂家销缺。查找现场防误闭锁装臵的运行情况缺陷及时报告建立起完善解锁钥匙的管理制度严格执行严格执行操作监护制度重新修改操作密码严格密码管理

使操作监护制度的执行从小操作就具备条件。

9.对继电保护及自动装臵进行全面检查核对保护装臵定值与定值

RackNerd美国大硬盘服务器促销:120G SSD+192TB HDD,1Gbps大带宽,月付$599,促销美国月付$服务器促销带宽

racknerd怎么样?racknerd最近发布了一些便宜美国服务器促销,包括大硬盘服务器,提供120G SSD+192TB HDD,有AMD和Intel两个选择,默认32G内存,1Gbps带宽,每个月100TB流量,5个IP地址,月付$599。价格非常便宜,需要存储服务器的朋友可以关注一下。RackNerd主要经营美国圣何塞、洛杉矶、达拉斯、芝加哥、亚特兰大、新泽西机房基于KVM虚拟化的VPS、...

iHostART:罗马尼亚VPS/无视DMCA抗投诉vps;2核4G/40GB SSD/100M端口月流量2TB,€20/年

ihostart怎么样?ihostart是一家国外新商家,主要提供cPanel主机、KVM VPS、大硬盘存储VPS和独立服务器,数据中心位于罗马尼亚,官方明确说明无视DMCA,对版权内容较为宽松。有需要的可以关注一下。目前,iHostART给出了罗马尼亚vps的优惠信息,罗马尼亚VPS无视DMCA、抗投诉vps/2核4G内存/40GB SSD/100M端口月流量2TB,€20/年。点击直达:ih...

香港E3-1230v2 16GB 30M 326元/月 数脉科技

官方网站:https://www.shuhost.com/公司名:LucidaCloud Limited尊敬的新老客户:艰难的2021年即将结束,年终辞旧迎新之际,我们准备了持续优惠、及首月优惠,为中小企业及个人客户降低IT业务成本。我们将持续努力提供给客户更好的品质与服务,在新的一年期待与您有美好的合作。# 下列价钱首月八折优惠码: 20211280OFF (每客户限用1次) * 自助购买可复制...

assert函数为你推荐
站长故事科学家的故事200字滚动代码来回滚动代码qq空间打扮QQ空间打扮lockdowndios8.1怎么激活内置卡贴如何快速收录如何掌握百度收录之快速收录什么是云平台什么是家庭云平台?微信电话本怎么用微信电话本好用吗freebsd安装FreeBSD怎么安装去鼠标加速度win7怎么去鼠标加速度液晶显示器电源维修液晶显示器通电无显示应如何维修?
子域名查询 未注册域名查询 php空间租用 租服务器价格 播放vps上的视频 快速域名备案 罗马假日广场 site5 gateone 云图标 私有云存储 合肥鹏博士 骨干网络 元旦促销 全站静态化 cdn加速原理 爱奇艺vip免费试用7天 hkt 100mbps hktv 更多