assert函数详解

news2024/7/4 5:45:27

assert函数详解

  • 1.函数概述
  • 2.assert函数一般用法
  • 3.assert函数的一些使用案例
    • 3.1判断大小
    • 3.2strlen函数的模拟实现
    • 3.3其它
  • 4.注意

1.函数概述

在这里插入图片描述
评价一个表达式,当表达式错误时,输出一个诊断信息并且终止程序

  • assert是一个宏,在使用之前要调用库函数<assert.h>

  • assert宏通常用于在开发过程中识别逻辑错误,通过使表达式参数仅在程序运行不正确时评估false来实现,当expression评估为false(0)时,assert打印一条诊断消息并调用abort终止程序执行。如果expression为true(非零),则不采取任何操作。诊断消息包括失败的表达式以及断言失败的源文件和行号的名称。
    在这里插入图片描述
    在这里插入图片描述

  • 诊断消息的目标取决于调用该例程的应用程序类型。控制台应用程序始终通过stderr接收消息。在单线程或多线程Windows应用程序中,assert调用WindowsMessageBox API创建一个带有OK按钮的消息框来显示消息。当用户选择OK时,程序立即中止。

  • 当应用程序与运行时库的调试版本链接时,assert会创建一个带有三个按钮(Abort、Retry和Ignore)的消息框。如果用户选择Abort,则程序立即中止。如果用户选择Retry,则会调用调试器,并且如果启用了即时(JIT)调试,则用户可以对该程序进行调试 。如果用户选择Ignore,则assert将按照正常执行方式继续:创建带有OK按钮的消息框 。
    在这里插入图片描述

2.assert函数一般用法

下面时assert函数使用的一些意义和使用情况:

//
//1.帮助调试:断言可用于在程序开发和调试阶段发现问题。
//通过在关键位置插入断言,可以验证程序中的假设和约定是否正确。
//如果断言失败,那么说明程序存在潜在问题,
//帮助开发者迅速定位和修复错误。
//
//2.捕捉逻辑错误:断言可以检查代码中的逻辑错误。
//通过在关键点检查预期条件,可以捕获到程序在执行中出现的意外情况,
//例如数组下标越界、指针为空等,从而帮助防止潜在的崩溃或未定义的行为。
//
//3.说明假设条件:代码通常基于一些特定的假设条件来进行设计。
//断言可以将这些假设条件表达出来,并在运行时进行验证。
//如果假设条件不满足,断言将失败并指示出程序设计的问题。
//
//4.需要注意的是,断言是开发期间的调试工具,通常在软件发布之前应该将其禁用或移除。
//在发布版本中,断言可能会带来性能损失,并且不应该影响正常的用户体验。
//通常通过定义 NDEBUG 宏来禁用断言,可以在编译时使用 - DNDEBUG 选项来禁用所有断言。
//
//5.总结起来,断言是一种用于检查程序中的条件是否满足的工具,
//可以帮助调试和捕捉逻辑错误。
//它在开发和调试阶段使用,对于确保软件的稳定性和正确性非常有帮助

3.assert函数的一些使用案例

3.1判断大小

在这里插入图片描述

3.2strlen函数的模拟实现

在这里插入图片描述
此时可以防止传入的是一个空指针

3.3其它

1	assert( *string != '\0' );       /* Cannot be empty */
2    assert( strlen( string ) > 2 );  /* Length must exceed 2 */

4.注意

assert函数只有在Debug版本中才有效,在Release版本中会被忽略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解:-bash: mysql command not found (mysql未找到命令)

1、确认是否安装MySQL rpm -qa |grep mysql rpm -qa |grep mariadb MariaDB是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;是广泛使用的MySQL数据库技术的替代品。安装MySQL后就会覆盖掉之前的mariadb。 如果没有就需要找教程安装 2、找到自己My…

【软件设计师】上午题

【软考】软件设计师plus 「软件设计师」 2022年下半年上午真题解析视频 计算机系统知识 22下 考点&#xff1a;指令系统之CISC vs RISC RISC指令系统整体特点是简单、精简 》指令种类少&#xff0c;但是指令功能强 考点&#xff1a;计算机系统组成 A属于运算器&#xff0c;…

嵌入式开发三:STM32初体验

本节主要向大家介绍如何开发过程中的基本操作&#xff0c;如编译、串口下载、仿真器下载、仿真调试程序&#xff0c;体验一下 STM32 的开发流程&#xff0c;并介绍 MDK5 的一些使用技巧&#xff0c;通过本节的学习&#xff0c;将对 STM32 的开发流程和 MDK5 使用有个大概了解&a…

八股文(C#篇)

C#中的数值类型 堆和栈 值类型的数据被保存在栈&#xff08;stack)上&#xff0c;而引用类型的数据被保存在堆&#xff08;heap&#xff09;上&#xff0c;当值类型作为参数传递给函数时&#xff0c;会将其复制到新的内存空间中&#xff0c;因此在函数中对该值类型的修改不会影…

ttkbootstrap界面美化系列之Menubutton(五)

一&#xff1a;Menubutton接口 print(help(help(ttk.Menubutton))) Help on class Menubutton in module tkinter.ttk:class Menubutton(Widget)| Menubutton(masterNone, **kw)|| Ttk Menubutton widget displays a textual label and/or image, and| displays a menu wh…

linux搭建个人博客wordpress(LNMP)

目录 准备阶段&#xff1a; 1.部署LNMP环境 2.配置数据库 3.上线WordPress博客平台 4.来到web界面安装博客平台 5.WordPress博客平台优化 总结&#xff1a; 利用LNMPWordPress搭建博客网站平台 WordPress是一款使用PHP语言开发的博客平台 1.易用性高&#xff1a;操作简单…

模拟集成电路(2)----MOSFET大小信号分析,二级效应

模拟集成电路(2)----MOSFET大小信号分析&#xff0c;二级效应 文章目录 模拟集成电路(2)----MOSFET大小信号分析&#xff0c;二级效应MOS的结构及符号大信号特性Turn-on process for an NMOS耗尽区反形层形成 I-V特性推导三极管区 ( V D S ≤ V G S − V T H ) (V_{DS}\le V_{G…

杭电acm1013 Digital Roots 数字根 Java解法 高精度

Problem - 1013 (hdu.edu.cn) 高精度算术模拟 开long没过想到开bI 开bl一次过 import java.math.BigInteger; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);BigInteger i;while (!(i sc.nextB…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么&#xff1f;直观解释Transformer | 深度学习第5章 0:00 - 预测&#xff0c;采样&#xff0c;重复&#xff1a;预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层&#xff1a;…

HT32F52352 -- 解锁电调、电机速度控制

一、问题背景 1.1 硬件&#xff1a; 电池组&#xff0c;电子调速器&#xff08;好盈电调 /ESC&#xff09;&#xff0c;接收机&#xff08;HT32F52352&#xff09;&#xff0c;风扇。 1.2 软件 keil5 二、问题分析 通过1.1图中可知&#xff0c;我们只需要使用 HT32F52352 模拟…

MAT内存分析软件安装

一、简介 MAT&#xff08;Memory Analyzer Tool&#xff09;工具是java堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是Eclipse开发的免费的性能分析工具。 下载链接https://www.eclipse.org/mat/downloads.php 二、安装常见问题 1. 仅支持JDK17及以上版本 …

在GPU上加速RWKV6模型的Linear Attention计算

精简版&#xff1a;经过一些profile发现flash-linear-attention中的rwkv6 linear attention算子的表现比RWKV-CUDA中的实现性能还要更好&#xff0c;然后也看到了继续优化triton版本kernel的线索。接着还分析了一下rwkv6 cuda kernel的几次开发迭代以此说明对于不懂cuda以及平时…

如何使用Go语言的标准库和第三方库?

文章目录 一、如何使用Go语言的标准库示例&#xff1a;使用标准库中的fmt包打印输出 二、如何使用Go语言的第三方库示例&#xff1a;使用第三方库github.com/gin-gonic/gin创建Web服务器 总结 在Go语言中&#xff0c;标准库和第三方库的使用是日常编程中不可或缺的一部分。标准…

Java基于Spring Boot框架的课程管理系统(附源码,说明文档)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Spring IoCDI (1)

目录 一、IoC & DI入门 1、Spring是什么 &#xff08;1&#xff09;什么是容器&#xff1f; &#xff08;2&#xff09;什么是IoC&#xff1f; 二、IoC介绍 1、传统程序开发 2、解决方案 3、IoC程序开发 4、IoC优势 三、DI介绍 通过前面的学习&#xff0c;我们知…

5月4(信息差)

&#x1f384; HDMI ARC国产双精度浮点dsp杜比数码7.1声道解码AC3/dts/AAC环绕声光纤、同轴、USB输入解码板KC33C &#x1f30d; 国铁集团回应高铁票价将上涨 https://finance.eastmoney.com/a/202405043066422773.html ✨ 源代码管理平台GitLab发布人工智能编程助手DuoCha…

mysql设置允许其他IP访问

文章目录 更改mysql配置文件登录mysql 更改mysql配置文件 查找.ini或者.cnf文件 更改bind-address为0.0.0.0 [mysqld] character-set-serverutf8mb4 bind-address0.0.0.0 default-storage-engineINNODB [mysql] default-character-setutf8mb4 [client] default-character-s…

探索设计模式的魅力:分布式模式让业务更高效、更安全、更稳定

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索分布式模式之旅✨ 在数字化时代&#xff0c;企业面临着前所未有的挑战和机遇。…

企业计算机服务器中了halo勒索病毒怎么处理,halo勒索病毒解密流程

随着网络技术的不断发展&#xff0c;网络在企业生产运营过程中发挥着重大作用&#xff0c;很多企业利用网络开展各项工作业务&#xff0c;网络也大大提高了企业的生产效率&#xff0c;但随之而来的网络数据安全问题成为众多企业关心的主要话题。近日&#xff0c;云天数据恢复中…

python学习笔记----异常、模块与包(九)

一、异常 1.1 什么是异常 在Python中&#xff0c;异常是程序执行时发生的错误。当Python检测到一个错误时&#xff0c;它会引发一个异常&#xff0c;这可能是由于多种原因&#xff0c;如尝试除以零、访问不存在的文件&#xff0c;或者尝试从列表中获取不存在的索引等。异常处…