当前位置: 首页 > news >正文

C语言中的assert断言,你了解多少呢?

引言

‘        介绍了assert 是什么,以及assert的优缺点

一、什么assert是断言

        assert.h 头文件定义了宏 assert() ,用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。

	int a = 10;assert(a == 5); //判断a 是不是等于 5

        上面代码在程序运行到这⼀行语句时,验证 a 是不是等于 5如果a 等于 5,则程序正常执行,如果a 不等于 5,则程序终止运行,并且给出报错信息提示。

如:

#include<stdio.h>
#include<assert.h>int main()
{int a = 10;assert(a == 5);printf("程序正常执行");return 0;
}

         运行这段代码会发现,程序报错崩溃了,并且在屏幕上打印出了哪个位置错误;

所以说:使用assert断言,可以用于检查程序在某个特定点上的状态是否符合预期。 

二、assert断言介绍 

        assert() 宏接受⼀个表达式作为参数。如果该表达式为真(返回值⾮零), assert()不会产生任何作用,程序继续运行。如果该表达式为假(返回值为零), assert() 就会报错,在标准错误 流stderr 中写入⼀条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号。

         特优点:assert()不仅能自动标识文件和出问题的行号,还有⼀种无需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题,不需要再做断言,就在 #include <assert.h> 语句的前面,定义⼀个宏NDEBUG 。

例如:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NDEBUG //定义一个宏#include<assert.h>int main()
{int a = 10;assert(a == 5);printf("程序正常执行");return 0;
}

上面这段代码:

        很显然a 不是等于 5 的,assert应该会终止程序的,但因为在#define 前面定义了一个宏NDEBUG,所以assert不会起作用。

         如果程序又出现问题,可以移除 #define NDEBUG 指令(或者把它注释掉),再次编译,这样就重新启用了 assert() 语句。

        assert() 的缺点是,因为引入了额外的检查,增加了程序的运行时间。

        ⼀般我们可以在Debug中使用,在Release 版本中选择禁用 assert 就行。


http://www.mrgr.cn/news/94219.html

相关文章:

  • (Lauterbach调试器学习笔记)一、首次连接TriCore开发板调试
  • 16 | 实现简洁架构的 Store 层
  • 六、OpenGL中EBO的使用及本质
  • DNS 原理 | 解析过程 / 实验
  • 本地部署deepseek,局域网链接,添加个人知识库
  • linux docker 安装dify本地运行,及部署后运行出现502问题
  • sqli-lab靶场学习(八)——Less26-28
  • Kubernetes教程(七)了解集群、标签、Pod和Deployment
  • Tomato靶机攻略
  • Hashmap 键值对的value发生变化,是否需要重新put ?
  • Redis Sentinel (哨兵模式)深度解析:构建高可用分布式缓存系统的核心机制
  • 【深度学习】多元物料融合算法(一):量纲对齐常见方法
  • Linux机器之间排查网络连通问题
  • winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法
  • AI自动化编程初探
  • 机器人路径规划、轨迹优化系列课程
  • k8s面经
  • Django与模板
  • 27_Java2DRenderer结合freemarker动态生成图片
  • 【Linux内核系列】:文件系统