当前位置: 首页 > 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 就行。

相关文章:

  • 如何在 React 中实现组件懒加载?
  • 带环链表的相关知识点
  • STM32 F407ZGT6开发板
  • Python完全指南:从基础到实践的编程艺术
  • PCL 点云AABB包围盒(二)
  • Shell编程:深入了解 Bash 数组操作
  • 洛谷 P5534 【XR-3】等差数列 python
  • 02_LVGL学习笔记:深理解样式(Style)机制与应用方法
  • 在类似于Manus的项目中,我想使用python控制用户的浏览器,我应该选择selenium呢?还是playwright?
  • 关于pytorch项目的心得
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.4.1实时行为模式检测(Anomaly Detection)
  • 色彩重生:基于 Retinex 理论的 UR2P-Dehaze 去雾增强器解析
  • Android14 TaskOrganizer导致黑屏
  • Vue的scoped原理是什么?
  • Spring boot3-WebClient远程调用非阻塞、响应式HTTP客户端
  • 数字电子技术基础(二十七)——输入端电阻的负载特性
  • electron 安装报错:RequestError: certificate has expired
  • 第14章 kali linux(网络安全防御实战--蓝军武器库)
  • 「JavaScript深入」理解 Object.defineProperty 与 Proxy
  • 每日一题之能量晶石
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教
  • 乡村快递取件“跑腿费”屡禁不止?云南元江县公布举报电话
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 广州下调个人住房公积金贷款利率