文章目录

  • 断言(assert)及其作用
  • 为什么断言只用于测试阶段
  • 关于断言你需要注意的事

断言(assert)及其作用

断言是一种除错机制,用于验证代码是否符合编码人员的预期。编码人员在开发期间应该对函数的参数、代码中间执行结果合理地使用断言机制,确保程序的缺陷尽量在测试阶段被发现。

也就是说,断言assert函数只能在测试阶段用,不能再release版本使用。那么我们可以用什么方法实现呢? 宏定义。(ps:不用作断言的宏,尽量不要包含ASSERT)

#include<assert.h>   //需要包含的头文件,release版本去掉,测试时使用
#include<stdio.h>
/* assert 的使用 */
#define DEBUG   // release 版本注释掉即可,测试版本定义
#ifdef DEBUG
#define ASSERT(f) assert(f)
#else
#define ASSERT(f) ((void)0)
#endifvoid display(int n) {ASSERT(n > 0);printf("%u", n);
}int main()
{unsigned int x;scanf_s("%u", &x);display(x);getchar();getchar();return 0;
}

为什么断言只用于测试阶段

为什么断言只能用于测试阶段: 如果用于运行阶段,断言可能会使程序异常退出,但其实这不是最重要的(mdzz)。最根本的运用是,这种错误应该是在程序设计测试阶段解决的。

关于断言你需要注意的事

使用断言(ASSERT)你需要注意的事:

  1. 断言必须使用宏定义,静止直接调用系统提供的assert()–如上所述,断言一般用于测试版本
  2. 运行时可能会导致的错误,严禁使用断言
  3. 严禁在断言内改变运行环境
  4. 一般不要把多条语句放在同一个断言中

断言(assert)及其作用相关推荐

  1. 断言assert 的作用

    1.断言assert 是仅在Debug 版本起作用的宏,它用于检查"不应该"发生的情况: 2.以下是使用断言的几个原则:    (1)使用断言捕捉不应该发生的非法情况.不要混淆非法 ...

  2. C语言断言assert()函数

    文章目录 断言(assert)的用法 用法总结与注意事项 1)在函数开始处检验传入参数的合法性 2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败 ...

  3. 断言(assert)详解

    目录 一.assert定义 二.用法总结与注意事项 四.以下是使用断言的几个原则: 一.assert定义 我一直以为 assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错 ...

  4. python assert的作用

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

  5. Linux C 中断言assert()使用简介

    assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继续执行后面的语句,它的作用是终止程序 ...

  6. java 断言 assert 初步使用:断言开启、断言使用

    主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言只适用于复杂的调试过程. 断言一般用于程序执行结果的判断 ...

  7. 理解和正确使用Java中的断言(assert)

    理解和正确使用Java中的断言(assert) 一.语法形式:     Java2在1.4中新增了一个关键字:assert.在程序开发过程中使用它创建一个断言(assertion),它的 语法形式有如 ...

  8. java 断言 assert 详解:断言开启、断言使用

    java中的断言Assert的使用 一.背景 二.如何判断是否开启了断言 三.开启断言 四.断言的使用 方法一.assert <boolean表达式> 方法二.assert <boo ...

  9. Java: 断言(assert)

    断言(assert)语句一半用于程序不准备通过捕获异常来处理的错误.例如:账号交易时,对于支出的金额为正数(收入+支出=纯收入)或者收入的金额为负数,程序必须立即停止执行,同时发现错误,当正式收益时, ...

  10. 断言ASSERT使用详解

    一.assert的定义 原以为assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错"在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert() ...

最新文章

  1. 终于有人把计算机视觉讲明白了 。。。
  2. 别在 Java 代码里乱打日志了,这才是正确的打日志姿势
  3. 【Android 逆向】Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )
  4. 按钮滑动隐藏,停止滑动显示的动画
  5. 手写带注册中心的rpc框架(Netty版和Socket版)
  6. 「第三只手」机械臂:采水果,破墙壁!
  7. orcle mysql 查询_Oracle与Mysql的高级查询与难点sql
  8. 屏幕坏点检测图片_iPhone新机如何检测质量 iPhone新机检测质量步骤【详解】
  9. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇
  10. 业务逻辑层的Helper基类
  11. 【狂人小白】MyBatis.001 学习巴提斯!
  12. 王垠系列博文(题名外挂URL)
  13. 人工智能数学基础:无理数e的由来以及对数、指数函数的求导
  14. java 刻度尺_用java代码如何实现画坐标刻度尺图
  15. 大学英语B-必考词汇400个
  16. centos通过nmcli设置静态ip及设置开机自动连接
  17. 华为机试真题 Python 实现【不含 101 的数】【2022.11 Q4新题】
  18. 常见测试场景用例设计(1):登录页面测试用例
  19. 谈谈百度贴吧、豆瓣小组以及BBS这个产品形态
  20. buuctf web [GXYCTF2019]Ping Ping Ping(呜呜呜做个题都要被骂)

热门文章

  1. [ 教程 ] 小米4 MI4 cancro 刷完win10预览版后回到MIUI
  2. 华为荣耀20和x10比较_华为畅享20Plus和荣耀X10哪个好-华为畅享20Plus和荣耀X10参数对比...
  3. 【通信】基于Matlab模拟Link16通信战术数据链分析
  4. 苹果Q1没少赚钱,但中国区营收同比下滑27%
  5. 消除计算机上的静电有哪些方法,怎么消除电脑显示屏静电问题 电脑静电如何消除...
  6. 做软文营销,有哪些方面的优势?
  7. usg2130 虚拟服务器,USG2130防火墙透明模式,trust-dmz禁止所有流量,仍然可以互通...
  8. 弥补学生时代的遗憾~C#注册表情缘
  9. PTA-C语言 吃鱼还是吃肉
  10. ps一些比较有用的要点