Assert 的用法
Assert
Assert是断言的意思,头文件为assert.h,
assert是一个宏
功 能: 测试一个条件并可能使程序终止
用 法: void assert(int test);
在单元测试中经常使用断言
断言只有在Debug模式下才有效,它可以有两种形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1应该总是一个布尔值,Expression2是断言失败时输出的失败消息的字符串。如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。
官方解释是:编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
通俗一点说:编写代码时,我们假设代码运行到某行时,某些变量的值应该是等于多少,如果不等于,说明程序逻辑不对,可能造成不稳定,
比如,我之前定义了一个变量m ,在程序运行过程中m的值是会改变的,依照正确的思路,程序运行到100行时m的值应该是100,那么,我就在程序的第101行写上 assert(m=100);
如果m==100,那么assert返回true,如果m!=100,那么assert会返回false,程序运行到这里就会出现断言错误,
可见assert很大程度上辅助测试代码的,让代码更强壮更稳定
用法验证:
程序实例1:
// 0001.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
struct ITEM { int key; int value; }; void additem(struct ITEM* itemptr) { assert(itemptr!=NULL); } int main(int argc, char* argv[])
{
additem(NULL); return 0; }

实例2:
// 0001.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include<stdio.h>
#include<assert.h>
#include<stdlib.h> int main(int argc, char* argv[])
{
FILE* fp; fp=fopen("test.txt","w");//以可写的方式打开一个文件,如果不存在就创建一个同名文件 assert(fp);//所以这里不会出错 fclose(fp); fp=fopen("noexitfile.txt","r");//以只读的方式打开一个文件,如果不存在就打开文件失败 assert(fp);//所以这里出错 fclose(fp);//程序永远都执行不到这里来 return 0; }

Assert 的用法的更多相关文章
- 断言(assert)的用法
		
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”. 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解 ...
 - assert()函数用法总结
		
assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> ...
 - (转)assert()函数用法总结
		
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h>void assert( in ...
 - 转:assert()函数用法总结
		
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h>void assert( in ...
 - C语言assert的用法
		
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int ...
 - java assert的用法简介【转】
		
assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...
 - C语言assert()函数用法总结
		
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( i ...
 - assert函数用法总结【转】
		
本文转载自:http://blog.csdn.net/u014082714/article/details/45190505 assert宏的原型定义在<assert.h>中,其作用是如果 ...
 - 【MFC】断言(ASSERT)的用法
		
摘自:Moondark http://www.cnblogs.com/moondark/archive/2012/03/12/2392315.html 断言(ASSERT)的用法 我一直以为as ...
 - 【C/C++】assert()函数用法总结
		
assert()函数用法总结 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> ...
 
随机推荐
- “我爱淘”第二冲刺阶段Scrum站立会议3
			
完成任务: 完成了注册界面的设计,以及部分代码,但是还没有完成服务器端的添加功能. 计划任务: 将注册功能实现了它,可以对数据库进行添加,在客户端实现分类功能,通过学院的分类查看书籍. 遇到问题: 分 ...
 - CDOJ ABCDE dp(前缀和优化)
			
题目链接: http://acm.uestc.edu.cn/#/problem/show/1307 ABCDE Time Limit: 1000/1000MS (Java/Others)Memory ...
 - 转 从红帽、GitHub和Docker看开源商业模式的进阶
			
从红帽.GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben Th ...
 - 设计模式PHP篇(二)————工厂模式
			
一个很简单的工厂模式.代码如下: <?php interface Person { public function sex(); } class Man implements Person { ...
 - javascript之彻底理解this
			
彻底理解this,需要彻底理解函数 函数是复杂类型,存储在堆中. 函数是独立的, 对象中的方法只是对象中有个函数的引用 函数被调用时,调用者会像被调用者提供个上下文环境, 这个环境就是this 构造 ...
 - Spring MVC @RequestParam @RequestHeader @CookieValue用法
			
摘要: package com.hust.springmvc1; import org.springframework.stereotype.Controller; import org.spring ...
 - 【前端学习笔记】arguments相关
			
arguments转数组: (function() { console.log(arguments instanceof Array); // --> false console.log(Obj ...
 - 第73天:jQuery基本动画总结
			
一.DOM对象跟jQuery对象相互转换 jQuery对象转换成DOM对象: 方式一:$(“#btn”)[0] 方式二:$(“#btn”).get(0) DOM对象转换成jQuery对象: $(doc ...
 - python的N个小功能(高斯模糊原理及实践)
			
原理: 二维高斯函数 1) 为了计算权重矩阵,需要设定σ的值.假定σ=1.5,则模糊半径为1的权重矩阵如下: 2) 这9个点的权重总和等于0.4787147,如果只计算 ...
 - 插件-3D轮播图
			
先上效果图 查看实例点击 这里 这个栗子中,可以选择展示 5 张 或者展示 3 张,即使是只有一个slide,也可以完成布局,正常轮播,麻麻再也不用怕只有4个slid而不能用这种轮播啦! 本栗实现原 ...