assert函数详解

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.mzph.cn/pingmian/6775.shtml

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

相关文章

[Meachines][Hard]Napper

Main $ nmap -p- -sC -sV 10.10.11.240 --min-rate 1000 $ curl http://10.10.11.240 $ gobuster dir -u "https://app.napper.htb" -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -k 博客 $ ffuf -c -w /usr/share/se…

使用LMDeploy部署和量化Llama 3模型

## 引言 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;正变得越来越重要&#xff0c;它们在各种自然语言处理任务中发挥着关键作用。Llama 3是近期发布的一款具有8B和70B参数量的模型&#xff0c;它在性能和效率方面都取得了显著的进步。为了简化Llama …

一文看懂Oozie面试题及参考答案

目录 描述Apache Oozie的主要功能和用途 解释Oozie在Hadoop生态系统中的作用 Oozie如何帮助管理和执行Hadoop作业

BUUCTF---misc---菜刀666

1、下载附件&#xff0c;在wireshark中分析 2、题目说是菜刀&#xff0c;联想到http协议的post方法 3、使用命令过滤 http.request.methodPOST 4、打开数据包&#xff0c;发现有个不一样 这里面有一大串的数据包 5、追踪http数据流&#xff0c;发现z2后面是一个jpg文件的文件…

中仕公考:哪些情况不能考公务员?

1.年龄不符合 主要分两类【一类是未成年人&#xff0c;另一类是超龄人员】 具体来讲:年龄一般为18周岁以上、35周岁以下 (2024国考标准是1987年10月至2005年10月期间出生&#xff09; 对于2024年应届硕士、博士研究生(非在职人员)放宽到40周岁以下(2024国考标准是1982年10月以后…

GitHub Desktop安装与使用教程

GitHub Desktop 是GitHub公司推出的一款桌面应用程序&#xff0c;旨在帮助开发人员更轻松使用GitHub。它提供了一个直观的用户界面&#xff0c;允许用户通过图形化界面来执行常见的 Git 操作&#xff0c;如克隆仓库、创建分支、提交更改、合并代码等。 GitHub Desktop 的设计使…

Spring - 7 ( 13000 字 Spring 入门级教程 )

一&#xff1a;Spring Boot 日志 1.1 日志概述 日志对我们来说并不陌生&#xff0c;我们可以通过打印日志来发现和定位问题, 或者根据日志来分析程序的运行过程&#xff0c;但随着项目的复杂度提升, 我们对日志的打印也有了更高的需求, 而不仅仅是定位排查问题 比如有时需要…

基于JSP的酒店客房管理系统(二)

目录 第二章 相关技术介绍 2.1 Jsp的简介 2.2 sql server 2005 的简介 第三章 系统的分析与设计 3.1 系统需求分析 1&#xff0e;理解需求 2&#xff0e;需求分析 3.2开发及运行环境 3.3功能模块的设计 3.3.1 设计目标 3.3.2 客房管理系统前台的设计 3.3.3 操作员管…

[QNX] mmap+cache/nocache+memcpy/asm_memcpy速度对比

mmap nocache介绍 以linux系统的nocache介绍&#xff1a; 在Linux系统中&#xff0c;使用mmap映射文件到内存时可以指定不使用缓存。这可以通过在调用mmap时将MAP_NOCACHE标志传递给mmap函数来实现。 MAP_NOCACHE标志告诉内核不要将映射的内存页缓存到文件系统缓存中&#xff…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

Python语言例题集(013)

#!/usr/bin/python3 #建立循环链表。 class Node(): def init(self,dataNone): self.datadata self.nextNone n1Node(5) n2Node(15) n3Node(25) n1.nextn2 n2.nextn3 n3.nextn1 ptrn1 counter1 while counter<6: print(ptr.data) ptrptr.next counter1

ES相关性计算原理

了解es搜索过程中的相关性计算原理&#xff0c;对判断当前应用场景是否适合使用es来召回相关结果至关重要。本篇博文尝试对es在每一个节点执行搜索时如何计算query和经由倒排索引查询到的对应字段文本之间的相关性做简要说明。 ES搜索过程&#xff08;节点层面&#xff09; ES…

2024.4.27 —— LeetCode 高频题复盘

目录 102. 二叉树的层序遍历33. 搜索旋转排序数组121. 买卖股票的最佳时机200. 岛屿数量20. 有效的括号88. 合并两个有序数组141. 环形链表46. 全排列236. 二叉树的最近公共祖先 102. 二叉树的层序遍历 题目链接 Python 方法一 # Definition for a binary tree node. # clas…

深入浅出区块链技术:原理、应用与挑战

区块链技术是一种分布式数据库技术&#xff0c;其核心在于提供一个去中心化、不可篡改的数据记录系统。以下是区块链技术的原理、应用和面临的挑战的详细解析&#xff1a; ### 原理 1. **去中心化**&#xff1a;区块链技术不依赖于中央控制点&#xff0c;而是通过网络上的多个…

菜鸡学习netty源码(五)—— EventLoop

1.EventLoop的类关系图 2. EventExecutor /*** 返回自身的对象* Returns a reference to itself.*/OverrideEventExecutor next();/*** 获取所属的EventExecutorGroup* Return the {link EventExecutorGroup} which is the parent of this {link EventExecutor},*/EventExecuto…

利用大语言模型(KIMI)构建智能产品的信息模型

数字化的核心是数字化建模&#xff0c;为一个事物构建数字模型是一件非常繁杂和耗费人工的事情。利用大语言模型&#xff0c;能够轻松地生成设备的信息模型&#xff0c;我们的初步实验表明&#xff0c;只要提供足够的模板&#xff0c;就能够准确地生成设备的数字化模型。 我们尝…

Pytorch 实现 GAN 对抗网络

GAN 对抗网络 GAN&#xff08;Generative Adversarial Network&#xff09;对抗网络指的是神经网络中包括两个子网络&#xff0c;一个用于生成信息&#xff0c;一个用于验证信息。下面的例子是生成图片的对抗网络&#xff0c;一个网络用于生成图片&#xff0c;另一个网络用于验…

debootstrap构建基于Debian的嵌入式系统的rootfs

嵌入式芯片&#xff1a;iMX6ULL 准备环境&#xff1a; 确保您的开发机器已安装debootstrap和qemu-user-static&#xff08;如果您在非ARM机器上构建ARM rootfs&#xff09;。 sudo apt-get updatesudo apt-get install debootstrap qemu-user-static使用debootstrap创建rootf…

[C++基础学习-06]----C++指针详解

前言 指针是一个存储变量地址的变量&#xff0c;可以用来访问内存中的数据。在C中&#xff0c;指针是一种非常有用的数据类型&#xff0c;可以帮助我们在程序中对内存进行操作和管理。 正文 01-指针简介 指针的基本概念如下&#xff1a; 声明指针&#xff1a;使用“*”符…

Python零基础快速入门学习笔记

文章目录 1. 安装python2. 安装vscode3. python语法3.1 流程控制3.1.1 条件语句3.1.2 循环语句 3.2 模块与包3.2.1 模块3.2.2 包 3.3 数据类型3.3.1 数字&#xff08;Number&#xff09;3.3.2 字符串&#xff08;string&#xff09;3.3.3 列表&#xff08;list&#xff09;3.3.…