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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 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(断言) 的用法的更多相关文章

  1. python assert 断言详细用法格式

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...

  2. assert断言基础用法

    Python的assert是用来检查一个条件,如果它为真,就不做任何事.如果它为假,则会抛出AssertError并且包含错误信息

  3. assert断言用法

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...

  4. C++ 中assert断言函数的基本用法

    在我们的实际开发过程之中,常常会出现一些隐藏得很深的BUG,或者是一些概率性发生的BUG,通常这些BUG在我们调试的过程中不会出现很明显的问题,但是如果我们将其发布,在用户的各种运行环境下,这些程序可 ...

  5. C++ ASSERT() 断言机制

    C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...

  6. delphi提示错误行号之Assert(断言)

    一.用法:Assert(表达式)1.如果为假 Assert会产生一个EAssertionFailed异常,显示为 Assertion Failed (C:/src/unit1.pas, [size=+ ...

  7. assert的基本用法

    assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库函数等.另外,从理论上来 ...

  8. Python全栈开发之---assert断言

    一.python assert的作用: 根据Python 官方文档解释(https://docs.python.org/3/reference/simple_stmts.html#assert), & ...

  9. Python assert 断言函数

    http://blog.csdn.net/hunyxv/article/details/52737339 使用assert断言是学习python一个非常好的习惯,python assert 断言句语格 ...

随机推荐

  1. sql 左连接与右连接

    假设有A,B两个表. 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID ...

  2. 针对list<object>中的对象数据的一些简单处理

    一    首先创建一个实体类(PersonData ): package hello; public class PersonData { String Id; String Name; String ...

  3. Kotlin -help

    { kotlin: run Kotlin programs, scripts or REPL. Usage: kotlin <options> <command> <ar ...

  4. Vue-cli中使用vConsole,以及设置JS连续点击控制vConsole按钮显隐功能实现

    最近发现了一个鹅厂的仓库,实现起来比我这个方便[捂脸].https://github.com/AlloyTeam/AlloyLever 一.vue-cli脚手架中搭建的项目引入vConsole调试 1 ...

  5. Java-Class-I:java.util.Map

    ylbtech-Java-Class-I:java.util.Map 1.返回顶部 1.1. import java.util.HashMap; import java.util.Map; 1.2. ...

  6. window location跳转

    "top.location.href"是最外层的页面跳转"window.location.href"."location.href"是本页面 ...

  7. Python正则表达式如何进行字符串替换实例

    Python正则表达式如何进行字符串替换实例 Python正则表达式在使用中会经常应用到字符串替换的代码.有很多人都不知道如何解决这个问题,下面的代码就告诉你其实这个问题无比的简单,希望你有所收获. ...

  8. 《DSP using MATLAB》Problem 8.45

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  9. scala容器对象(转载)

    1Array 数组 Scala的数组是这个样子: val arr = new Array[String](3) 程序员们基本都看得懂,new 一个Array对象,它的类型是String,长度为3.对元 ...

  10. Codeforces Round #526 D - The Fair Nut and the Best Path /// 树上两点间路径花费

    题目大意: 给定一棵树 树上每个点有对应的点权 树上每条边有对应的边权 经过一个点可得到点权 经过一条边必须花费边权 即从u到v 最终得分=u的点权-u到v的边权+v的点权 求树上一条路径使得得分最大 ...