1 assert概念

  函数名:assert

  头文件:#include<assert.h>

  函数原形:void assert( int expression )

2 assert作用

  assert的作用是先计算expression表达式的值,如果计算结果为真,继续运行下面的程序;如果计算结果为假,则程序终止运行。

  assert函数主要是检测程序的未知错误。比如对指针操作时指针是否为NULL;某个变量是否符合预定范围等等

3 assert用法

3.1 检测调用者传过来的指针参数是否正常

void test(int* p)
{
assert(p != NULL);//用来判断调用者传过来的指针参数是否为空
/*函数体*/
}
延伸:上面判断指针是否为空,前提条件是
1 定义指针时就要初始化为NULL,比如`int* p = NULL;`;
2 释放指针变量后也要把指针赋值为NULL,比如:
```
free(p);
p = NULL;
```

3.2 判断某个变量的范围

void test()
{
int i = 0;
/*
*对i的相关操作,假设i小于32为有效范围
*/
assert(i < 32);
/*继续关于i的操作*/
}

  关于assert的使用,可以根据自己的需要使用在程序任何地方,用来检测程序的异常。但是,过多的使用asser函数,频繁调用会非常影响程序的性能,增加额外的开销。

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

#include<stdio.h>
#define NDEBUG
#include<assert.h>

3.3 assert只检验一个地方

  同时检验多个条件,如果出现断言错误,不能分辨出是哪个条件判断错误,比如:

//错误
assert(i < 32 && i + temp < i_max);
//正确
assert(i < 32);
assert(i + temp < i_max);

3.4 不能使用改变环境的语句

  因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:

//错误
assert(i++ < 32);

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

//正确
assert(i < 32);
i++;

  assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。

参考:assert()函数用法总结

assert函数应用的更多相关文章

  1. assert()函数用法总结

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

  2. 【php】assert函数的用法

    [php]assert函数的用法 http://www.douban.com/note/217557007/ 2012-06-01 10:32:37   assert这个函数在php语言中是用来判断一 ...

  3. python中assert()函数的使用

    关于assert()函数的使用,主要参考博客https://blog.csdn.net/qq_37119902/article/details/79637578 assert函数主要是用来声明某个函数 ...

  4. 解决用try except 捕获assert函数产生的AssertionError异常时,导致断言失败的用例在测试报告中通过的问题

    在使用Python3做自动化测试过程中可能会遇到,assert函数不加try  except,就可以正常在报告里体现用例不通过,加上变成通过. 这是因为在使用try except 时,捕获了asser ...

  5. assert函数的用法

    assert这个函数在php语言中是用来判断一个表达式是否成立.返回true or false; 例如: <?php $s = 123; assert("is_int($s)" ...

  6. iOS exit(),abort(),assert()函数区别

    iOS exit(),abort(),assert()函数区别 exit() 退出程序 abort() 停止程序, assert()检查里面的参数如果为nil抛出异常:

  7. assert函数和捕获异常

    assert函数: C语言和C++都有一个专为调试而准备的工具函数,就是 assert()函数. 这个函数是在C语言的 assert.h 库文件里定义的,所以包含到C++程序里我们用以下语句: #in ...

  8. 【C/C++】assert()函数用法总结

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

  9. [XCTF嘉年华体验赛](web)web2 assert函数

    0x00 题目分析 浏览一遍页面,在about页面,获得如下信息 访问 .git/ ,页面存在. 使用githack扒下来.得到源码,进行代码审计. 分析得到: 1.flag在flag页面,要看源码才 ...

随机推荐

  1. idea自动下载依赖的源代码等信息

    mvn dependency:sources -DdownloadSources=true -DdownloadJavadocs=true

  2. 开始学习Docker啦--容器理论知识(一)

    目录 一.容器核心技术 1.容器规范 2.容器 runtime 3.容器管理工具 4.容器定义工具 5.Registry 6.容器 OS 二.说说容器 1.什么是容器 Containers vs. v ...

  3. 判断scrollView的滑动方向(二)

    在上一篇文章<判断scrollView的滑动方向>中谈到的第二种方法是根据滑动速率来判断的. 今天将通过滑动过程中的坐标差来判断 - (void)scrollViewDidScroll:( ...

  4. [转帖]两张图看懂GDT、GDTR、LDT、LDTR的关系

    两张图看懂GDT.GDTR.LDT.LDTR的关系 2018-06-09 18:13:53 Six_666A 阅读数 2044更多 分类专栏: 深入理解linux内核   转自:http://ju.o ...

  5. oracle多表关联查询和子查询

    oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...

  6. 90%程序员都没有完全答对Cookie和Session的区别

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  7. C语言细节

    一些常见细节 int *p[]和 int (*p)[] 的区别 int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了. int (*p)[4 ...

  8. C++中静态成员函数和普通成员函数存储方式相同

    先从一个示例查看类的创建过程中,静态成员函数和普通成员函数的存储区别. #include "stdafx.h" #include<iostream> #include& ...

  9. golang之面向对象编程

    1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. ...

  10. echarts的基本使用以及如何使用官方实例的方法

    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --> <div id="box" style="width: 600px;heigh ...