C语言——断言assert

C语言断言assert-从源码解析到熟练使用 C 标准库 - <assert.h> 简介 C 标准库的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。 已定义的宏 assert 指向另一个宏 NDEBUG,宏 NDEBUG 不是 <assert.h> 的一部分。如果已在引用 <assert.h> 的源文件中定义 NDEBUG 为宏名称,则 assert 宏的定义如下: #define assert(ignore) ((void)0) 库宏 下面列出 阅读详情

 1.assert是宏,不是函数。

2.assert(),如果括号里的表达式为0(false),则将消息写入标准错误设备并调用函数abort(),报错并终止程序执行。否则assert无任何作用。

例子:

#include<assert.h>
#include<stdio.h>
void fun(char* dest, char* src)
{
	while (*dest++ = *src++)`
	{
		;
	}
}


int main()
{
	char arr[20] = { 0 };
	char* p = NULL;
	fun(arr, p);
	return 0;
}

 

 对空指针进行解引用,报错了。

为判断指针的有效性,并将错误暴露,我们使用断言assert。

#include<assert.h>
#include<stdio.h>
void fun(char* dest, char* src)
{
//每个assert最好只检验一个条件,因为同时检验多个条件时,
//如果断言失败,无法直观的判断是哪个条件失败。
	assert(src != NULL);
    assert(dest !=NULL);
	while (*dest++ = *src++)
	{
		;
	}
}


int main()
{
	char arr[20] = { 0 };
	char* p = NULL;
	fun(arr, p);
	return 0;
}

每个assert最好只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败。 

快速定位出了错误。

3.在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。

 4.assert(),在release版本中被优化了

5. 头文件

C语言assert断言详解指针(3) assert叫做“断言”什么是断言“呢?请看下面代码示例。int a=10;int b=20;assert(a==b)//如果不为真,就报错大家看到了吧,assert非常的霸道,通常assert在指针的时候常用到,接下来介绍一下函数原型和函数参数。如果你想要使用这个函数的话,你就要使用它对应的头文件assert.h,返回返回值是void,函数的参数是整形的表达式,如果表达式结果为真执行),如果为假程序终止assert通常用来测试代码测试运行和指针的运算往往比if语句更加简洁方便。 阅读详情

相关推荐

【C语言】assert() 断言的作用

assert 是宏,而不是函数。它的原型定义在头文件 assert.h 中: void assert( int expression ); 宏 assert 经常用于在函数开始处检验传入参数的合法性,可以将其看作是异常处理的一种高级形式。assert 的作用是 先计算表达式 expression,然后判断: 如果表达式值为假,那么它先向 stderr 打印错误信息,然后通过调用 abort 来终止程序运行。 如果表达式值为真,继续运行后面的程序。 注意:assert 只在 DEBUG 下生效,在调试结

程序员「阿基米东」的编程之旅 9505

第十二章 C语言调试_assert断言函数

在我们的实际开发过程之中,常常会出现一些隐藏得很深的BUG,或者是一些概率性发生的BUG,通常这些BUG在我们调试的过程中不会出现很明显的问题,但是如果我们将其发布,在用户的各种运行环境下,这些程序可能就会露出马脚了。那么,如何让我们的程序更明显的暴露出问题呢?这种情况下,我们一般都会使用 assert 断言函数,这是C语言标准库提供的一个函数,也就是说,它的使用与操作系统平台,调试器种类无关。我们只要学会了它的使用,便可一次使用,处处开花。 接下来我们来了解一下 assert 函数的用法,这个函数在 as

qq_43205256的博客 7875

工程师职级胜任力框架

一、前言 尽管这些年国内的IT行业发展迅速,但是仍然欠缺一套比较综合性的面向工程师的职级胜任力框架,造成国内很多工程师大都一心只想成为技术大牛,而忽视了自己全方位的工程师职业素养和能力的培养。 最近我有幸读到了Circle CI公司分享的工程胜任力矩阵,发现这份文档就是一份比较贴合互联网研发型企业的工程师职级胜任力框架,于是我在它的基础上,重新整理出了一份更适合国内工程师阅读的《工程师职级胜任力框架》,并把它分享在波波的github站点上,希望这份文档对工程师的职业开发和成长有帮助。注,Circle CI.

架构师波波的专栏 6326

C语言技巧:调试时灵活运用assert

assert意思是断言,常用在程序的DEBUG版本中。

闪耀大叔的博客 1603

概率整形 Peobabilistic Shaping PS 第一节

概率整形概述 概率整形(Peobabilistic Shaping, PS)是一种针对于调制格式的优化技术,它为光通信通信提供了非常高的灵活性,但不会增加系统复杂性。尤其是光通信中的非线性问题会限制功率,使得PS就像为光通信量身定做的一样。 PS技术能够在不增加发送功率的前提下,获得高频谱效率和传输容量。2016年在使用PS技术的实验中实现了6600km单模光纤的65Tbit/s数据的传输。 到目前位置PS技术的研究主要集中在具有相干检测的单载波光纤传输。 概率整形的基本原理 概率整形技术就是通过在编码前

Explore_OuO的博客 8124

提升RAG效果:为何 JSON 格式远胜 Markdown?

在构建强大的 RAG (检索增强生成) 系统时,文档解析是至关重要的第一步。它直接影响着后续的检索效率和生成质量。在众多文档格式中,JSON (JavaScript Object Notation) 格式正逐渐展现出其相对于传统 Markdown 格式的巨大优势。本文将深入探讨 JSON 在 RAG 系统文档解析中的卓越之处,并结合具体案例,让你理解为何 JSON 才是构建下一代智能应用的更优选择。RAG 系统的核心目标是让模型能够利用外部知识库,生成更精准、更贴合实际的答案。

simoncool23的博客 2714

C语言 assert()用法

assert 是一个宏,用于在运行时(当程序正在执行时)检查特定条件,在调试程序时非常有用。要使用它,你需要在程序中包含头文件“assert.h”。assert 关键字用于将表达式作为函数参数执行,并在内存分配期间对其进行计算。因此,我们可以使用 malloc()方法来编写变量并计算。如果表达式计算失败或者返回false,则表达式以及文件名和执行行将作为错误返回。

qq_42815643的博客 1万+

3D医学影像分割新突破:手把手教你用MedSAM2快速标注CT/MRI数据(附3D Slicer插件配置)

本文详细介绍了如何利用MedSAM2模型进行3D医学影像分割,包括从环境准备到3D Slicer插件配置的全流程。通过实战案例和技巧分享,帮助医疗从业者快速掌握CT/MRI数据的高效标注方法,提升医学影像分析的准确性和效率。

ujm5678901的博客 299

C语言——assert函数

在C语言中,assert函数是一个非常有用的调试工具,用于在程序中插入断言,以便在运行时检查特定条件是否满足。如果断言条件不满足,assert函数将输出一条错误消息并终止程序的执行。在开发过程中,assert函数可以帮助我们快速发现程序中的错误,提高代码的健壮性和可靠性。

2301_80220607的博客 4576

文华财经公式编程:麦语言简介及基础语法

文华财经公式语言(麦语言)是一种专门用于金融领域的编程语言,它是由文华财经公司开发的。提供了丰富的金融计算函数和数据处理功能,可以用于金融市场的数据分析、模型建立和交易策略的开发。例1:A:CLOSE;// 定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。例2:MA5:=MA(C,5);// 定义收盘价的5周期均线(C为CLOSE简写)。例3:A:=REF(C,1);// 取得前一根k线的收盘价。

超哥量化的博客 1万+

1、动作捕捉技术:概述与历史

本博文全面介绍了动作捕捉技术的概念、历史演变、类型分类以及完整的工作流程。从早期的连续摄影技术到现代数字动作捕捉系统,文章深入探讨了光学、磁性和机械动作捕捉系统的优缺点及适用场景,并详细解析了动作捕捉数据的生成原理与数学基础。此外,还涵盖了特殊部位如手部、面部和木偶的动作捕捉方法,并讨论了动作捕捉在动画制作、虚拟现实、医疗康复等领域的广泛应用与发展前景。

apple5的专栏 219

C语言断言assert详解

C语言断言assert详解尽量利用断言来提高代码的可测试性用法总结与注意事项1)在函数开始处检验传入参数的合法性,如:2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败3)不能使用改变环境的语句,因为assert只在DEBUG中生效,如果这么做,会使用程序在真正运行时遇到问题4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感5)有的地方,assert不能代替条件过滤 尽量利用断言来提高代码的可测试性 assert宏的原型定义在<asse

宁静致远的博客 7954

基于Keil软件实现对射式红外传感器计次 (江协科技HAL库)

用HAL库复现江协科技,让嵌入式学习之路更顺畅。

2401_82728381的博客 798

【C语言】assert 断言

assert是C语言中用于调试的宏,定义在<assert.h>中。它检查表达式是否为真,若为假则终止程序并输出错误信息(文件名、行号等)。主要用于开发阶段验证程序假设,不应处理正常错误。通过定义NDEBUG宏可禁用所有断言。使用时应检查函数前置条件或不可能情况,避免用于用户输入或有副作用的表达式。assert是调试工具,发布时应替换为常规错误处理代码。

wefg1的博客 839

SAP ABAP Cloud 发展简史

其中用于云开发的 ABAP,官方术语是 「ABAP in the Cloud」,本文后续叙述方便起见,简称为 「ABAP Cloud」. 它涵盖了标准 ABAP 语言范围的一个子集,只能访问受限的 API,用于构建 SAP BTP ABAP 环境以及 SAP S/4HANA Cloud ABAP 环境上的云解决方案。SAP ABAP 平台是用于 SAP ECC、SAP S/4HANA 和 SAP BTP 等产品的技术平台,也是 ABAP 应用程序的开发和运行环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1391

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【C语言】深入解析assert 断言机制

在现代编程中,确保代码的正确性和稳定性是至关重要的。在 C 语言中,assert 是一个十分强大的工具,它能够有效帮助开发人员在开发阶段快速发现潜在的逻辑错误和运行时异常。在本次讨论中,我们将深入分析 assert 的运行机制、其在代码调试过程中的优势及限制,并探讨其在不同应用场景下的实践应用,旨在帮助读者从一个更高的角度理解并合理地使用这一工具。 assert 是编写健壮代码的核心部分之一,它通过验证运行时假设的正确性,使得程序员在面对复杂系统时能够更高效地管理调试和测试工作。 2024.11.25-✍

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 1276

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C语言之assert断言

在头文件之前定义该 NDEBUG 宏。这样,编译器在预处理时就会忽略所有的 assert语句。

zl_dfq的博客 565

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C语言:assert断言函数

很明显,这样做是不可以的。我们看到,只要我们定义了 NDEBUG 宏,assert 就会失效,而 Visual Studio 的默认的发布版程序编译参数中定义了 NDEBUG 宏,所以我们不用额外定义,但是在其他编译器中,我们在发布程序的时候就必须在包含assert.h 头文件前定义 NDEBUG 宏,避免 assert 生效,否则总是让用户看到“程序已经停止运行,正在寻找解决方案 . . .”的 Windows 系统对话框可就不妙了。在我们的实际使用过程中,我们需要注意一些使用 assert 的问题。

Dola的博客 1137

C语言 断言assert

1.表达式1为假断言失败程序才崩溃2.断言在Debug有效在Release无效Debug:程序员自己使用的版本,代码没有优化,可以调试,体积大Release:程序正式版本,代码有优化,没有调试信息,体积小。

ljy的博客 351

C语言 assert断言

在C语言中的assert.h头文件定义了宏assert(),⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。

qq_67140973的博客 810

【C语言】assert(断言)使用详解

在软件开发过程中,确保程序的正确性是非常重要的。为了帮助开发者在开发阶段尽早地发现潜在的问题,C语言提供了一个非常有用的工具——assert。本文将详细介绍assert的工作原理、使用方法以及一些最佳实践。assert是一个预处理器宏,通常被用来在开发和测试阶段检测程序中某些关键假设是否成立。当某个断言失败时,assert会终止程序,并输出一条错误信息,这有助于开发者快速定位问题所在。assert是一个非常有用且强大的工具,可以帮助开发者在开发过程中快速定位和修复错误。通过合理使用assert。

编程知识点梳理、项目经验总结、学习方法分享 6446

C语言的assert断言宏

C语言的assert断言宏 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); ​ assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。 如果assert()终止了程序,它首先会显示失败的测试、包含测试的文

Galaxy_Robot的博客 464

你真的会用assert吗?深入探讨C语言断言在调试中的黄金法则

掌握C语言断言assert宏调试用法,精准捕捉程序逻辑错误。适用于开发调试阶段验证函数参数、指针有效性与状态合法性,通过编译期控制实现零成本断言。提升代码健壮性与调试效率,避免运行时隐患,是C程序员必备的黄金调试法则,值得收藏。

InstrWander的博客 734

断言的作用c语言,C语言的assert断言宏

C语言的assert断言宏大家在学习C语言的时候对于assert断言宏了解多少呢?今天小编要为大家带来的是C语言的assert断言宏的相关知识,希望可以在大家学习C语言的时候有所帮助,一起来看看吧!assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#includevoid assert( int expression );assert的作用是现计算表达式 exp...

weixin_29258297的博客 398

C语言断言assert-从源码解析到熟练使用_c assert

在日常软件设计中,如果原先规定的一部分功能尚未实现,则应该使用断言来保证这些没有被定义的特性或功能不被使用。例如,某通信模块在设计时,准备提供“无连接”和“连接”这两种业务。但当前的版本中仅实现了“无连接”业务,且在此版本的正式发行版中,用户(上层模块)不应产生“连接”业务的请求,那么在测试时可用断言来检查用户是否使用了“连接”业务。/\*无连接业务\*/

2501_90425034的博客 937

【C标准库】一文吃透 C 语言 assert 断言

本文详解 C 语言 assert 断言,涵盖用法、工作机制、适用场景,辨析与 if 的区别,强调使用禁忌并给出自定义方法。

聆风吟的博客 1万+
上一篇: C语言——布尔类型
下一篇: 顺序表(数据结构)
outdated_socks
博客等级 码龄4年 185粉丝 17原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值