断言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.对继电保护及自动装臵进行全面检查核对保护装臵定值与定值

PIGYun中秋特惠:香港/韩国VPS月付14元起

PIGYun发布了九月份及中秋节特惠活动,提供8折优惠码,本月商家主推中国香港和韩国机房,优惠后最低韩国每月14元/中国香港每月19元起。这是一家成立于2019年的国人商家,提供中国香港、韩国和美国等地区机房VPS主机,基于KVM架构,采用SSD硬盘,CN2+BGP线路(美国为CUVIP-AS9929、GIA等)。下面列出两款主机配置信息。机房:中国香港CPU:1core内存:1GB硬盘:10GB...

GreenCloudVPS$20/年多国机房可选,1核@Ryzen 3950x/1GB内存/30GB NVMe/10Gbps端口月流量2TB

GreencloudVPS此次在四个机房都上线10Gbps大带宽VPS,并且全部采用AMD处理器,其中美国芝加哥机房采用Ryzen 3950x处理器,新加坡、荷兰阿姆斯特丹、美国杰克逊维尔机房采用Ryzen 3960x处理器,全部都是RAID-1 NVMe硬盘、DDR4 2666Mhz内存,GreenCloudVPS本次促销的便宜VPS最低仅需20美元/年,支持支付宝、银联和paypal。Gree...

RackNerd($199/月),5IP,1x256G SSD+2x3THDD

我们先普及一下常识吧,每年9月的第一个星期一是美国劳工节。于是,有一些服务商会基于这些节日推出吸引用户的促销活动,比如RackNerd有推出四款洛杉矶和犹他州独立服务器,1G带宽、5个独立IP地址,可以配置Windows和Linux系统,如果有需要独立服务器的可以看看。第一、劳工节促销套餐这里有提供2个套餐。两个方案是选择犹他州的,有2个方案是可以选择洛杉矶机房的。CPU内存SSD硬盘配置流量价格...

assert函数为你推荐
主页改不了浏览器主页改不了最新qq空间代码QQ空间代码有哪些???无线路由器限速设置无线路由器限速怎么设置!缓冲区溢出教程溢出攻击法使用什么样的原理怎么在qq空间里添加背景音乐怎么在QQ空间里插入背景音乐??flash导航条如何添加FLASH导航条照片转手绘有没有一种软件是可以把一张照片变成手绘的图片,给推荐下正则表达式javajava正则表达式苹果5怎么越狱苹果5怎么越狱xv播放器下载迅雷看看下载的XV格式的电影用什么播放器可以播放?(没有互联网的情况下)
域名劫持 网站域名备案查询 高防直连vps 已经备案域名 windows主机 godaddy 云主机51web debian源 嘉洲服务器 台湾谷歌网址 本网站服务器在美国 好看qq空间 asp免费空间申请 卡巴斯基试用版 如何用qq邮箱发邮件 hktv 申请网页 阿里云手机官网 学生服务器 阿里云邮箱登陆 更多