atexit

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放 本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。 阅读详情


atexit

  atexit用来注册在程序正常终止时调用的函数。
  
  一个进程可以登记多达32个函数,这些函数将由exit自动调用。这些函数被称为“终止处理函数(exit handler)”,atexit函数负责登记这些函数。
  atexit的原型及所在头文件

#include <stdlib.h>
int atexit(void (*function)(void));

  atexit的参数function是一个函数指针,function不含任务参数,也不返回一个值。

注:对于atexit的参数,我们如何确定其类型?
首先,将变量名字拿掉,余下的部分就是其类型。即function的类型为void (*)(void)
然后,由内而外看,function先与*结合,说明function是一个指针;
而后与函数调用符”()”结合,说明其指向的是一个函数;
参数列表中的void的,显示的指定该函数不需要参数;
最后,最前面的void指明函数不需要返回一个值。
因此,function是一个函数指针,它所指向函数的参数列表为空,返回类型为void。

  atexit的特性:

  1. exit调用这些函数的顺序与它们登记时候的顺序相反。
  2. 同一函数如若登记多次,则也会被调用多次。

测试

  在测试文件中,main函数开始处先注册一个终止处理函数foo,再注册两个终止处理函数goo。

#include <stdio.h>

void foo()
{
    printf("foo......\n");
}

void goo()
{
    static int a = 0;
    printf("goo......%d\n", ++a);
}

int main(void)
{
    atexit(foo);
    atexit(goo);
    atexit(goo);
    printf("main......\n");

    return 0;
}

  编译后执行一下,看看效果:
这里写图片描述
  可以看到,main函数流程结束后,exit分别调用了goo、goo和foo函数,调用顺序与它们的注册顺序相反。


  [注:由atexit的调用顺序想到的C++对象析构顺序]
  C++含类继承关系的对象,其析构顺序与此类型。
这里写图片描述

  如有父类Parent和其子类Child。如有下面语句: 

Child c;

  则先调用Parent的构造函数,再调用Child的构造函数;而析构时,则先调用Child的析构函数,再调用Parent的析构函数。

CDD数据库文件制作(二)——DTC配置 1.DTC库 2.新建DTC DTC相关介绍:https://blog.youkuaiyun.com/LOVE135149/article/details/122565443 ① 选择DTC数据库 ② 点击新建DTC ③ DTC参数编辑 3.将DTC库中的DTC加载到Variant中 找到Fault Memory的DTC Table,鼠标放在DTC Table区域,右键点击选择Copy … Reference from Available DTCs…,即可将DTC库中的故障码加载至Variant中。 虽然选择Co 阅读详情

相关推荐

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 323

atexit函数详解

#include <stdlib.h> int atexit(void (*func) (void)) ; 返回:若成功则为 0,若出错则为非 0 按照 A N S I C 的规定,一个进程可以登记多至 3 2 个函数,这些函数将由 e x i t 自动调用。我们 称 这 些 函 数 为 终 止 处 理 程 序 ( e x i t h a n d l e r ),并用 a t e x ...

weixin_43781183的博客 5569

NDVI空间分布变化Slope趋势分析与F检验(自用)

1.NDVI数据预处理2.一元线性回归分析3.Slope趋势分析与F检验

什么都学亿点点的博客 9017

17-atexit函数——进程终止

1. 终止函数   一般来说,内核中每个启动的进程默认都有一个标准的终止函数,用于在进程终止时执行的函数,该函数主要用来释放进程所占用的资源,也可以自定义终止函数,按照ISO C规定,一个进程可以注册32个终止函数,这些函数将由exit函数自动调用。   登记的终止函数以栈的形式运行,先注册的后执行。如果自定义注册了进程终止函数,那么内核提供的默认的终止函数将会被覆盖。   有同学可能会问...

网络安全 1856

基于Simulink的直流电机双闭环调速系统抗扰动仿真与参数优化

本文详细介绍了基于Simulink的直流电机双闭环调速系统仿真与参数优化方法。通过构建转速外环与电流内环的仿真模型,阐述了利用工程设计法整定PI参数的核心步骤,并重点探讨了如何优化系统参数以增强其抗负载突变等扰动的能力,实现快速、平稳的调速性能。

weixin_29061997的博客 192

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 523

atexit()函数

一、atexit函数 atexit函数是一个特殊的函数,它是在正常程序退出时调用的函数,我们把他叫为登记函数(函数原型:int atexit (void (*)(void))) 一个进程可以登记32个函数,这些函数由exit自动调用,这些函数被称为终止处理函数,atexit函数可以登记这些函数。exit调用终止处理函数的顺序和atexit登记的顺序相反,如果一个函数被多次登记,也会被多次

zhangfan_lovebk的博客 1849

情感分析在金融领域的应用:舆情影响股价预测

我们都知道,股价的波动受到多种因素的影响,而大众的情绪和看法就是其中很重要的一部分。我们在日常生活中都有根据别人的评价来判断事物好坏的经验,在金融市场里,舆情就像是大众对某家公司的集体评价,它能反映出市场参与者的情绪和预期。学习这方面的知识,能帮助投资者更好地把握市场动态,做出更明智的投资决策,无论是个人投资者还是金融机构的分析师,都能从中受益。有一天,你看到某家知名企业被曝光了严重的产品质量问题,新闻铺天盖地,股民们也都在热议纷纷,负面情绪弥漫。这时,你会不会觉得这家公司的股价可能要下跌了呢?

AI 原生应用开发的博客 1145

C++之atexit-pthread用法详解

atexit函数先注册三个func函数,然后等待3秒,再打印”hello main”(如果main函数中输出部分不加\n,则main函数要输出的内容会先放到标准输出缓冲区中,当main中调用exit函数的时候,会做一些自身清理工作,同时刷新标准输出缓冲区中的内容),当执行到exit(0)时,exit会自动调用这些已注册过的函数,但是由于压栈过程中先进后出的原则,所以先注册的函数最后执行。按 POSIX.1-2001 的规定,如果在终止处理程序中调用 longjmp()函数,这样导致的结果是未定义的.

weixin_56054625的博客 1548

零基础学simulink仿真建模--使用Simulink来构建一个混合动力无人机中燃料电池与锂电池协同控制的仿真模型

延长飞行时间:燃料电池的能量密度高于锂电池,适合长时间稳定供电。提高功率密度:锂电池能够快速响应瞬时高功率需求,比如起飞和加速阶段。优化能源管理:通过有效的能量管理系统,可以根据实际需求动态调整燃料电池和锂电池的工作状态,从而提高整体效率。通过上述步骤,我们简要介绍了如何基于Simulink实现混合动力无人机中燃料电池与锂电池协同控制的仿真模型。

amy_mhd的博客 189

Unreal5从入门到精通之初学者碰到解决不了的问题怎么办?

在学习Unreal的过程中,你曾陷入困境了吗?对于我来说,这种情况发生得比我愿意承认的要多得多。幸运的是,除了一般地在网上搜索之外,还有很多地方可以获得虚幻引擎的帮助。

TxNet 979

atexit函数介绍

根据我们的理解,一个程序的执行都是从MAIN函数开始执行,从MAIN函数结束,这不可否认没有问题,然后依次往下一条一条语句执行,但是事实真的是这样么,接下来看看这个程序,是不是像我们想象的那样呢?在linux下我编写了这样一个程序,先不要看答案,看看能不能做对(很简单的) 根据我们刚才的思路,这个程序应该是先调用fun1,fun2,...依次往下执行,最后的结果就是 i am NO.1!

haishark的博客 848

如何使用 Python 爬取 58 同城招聘信息

职位名称:招聘的岗位名称,如“前端开发”、“数据分析师”等。公司名称:招聘公司的名称。薪资待遇:职位的薪资范围,通常以“面议”、“10k-20k”这样的形式表示。工作地点:公司所在的城市及具体地址。公司福利:例如五险一金、带薪年假、绩效奖金等。发布时间:职位信息的发布时间。一个典型的招聘页面 URL 格式通常如下:在这个页面上,职位信息会分页展示,爬虫需要模拟翻页,获取多个页面的招聘信息。

2201_76125261的博客 1291

atexit函数

<br />今天在学习unix进程环境的时候遇到了atexit函数,不知道是啥,从网上找了一些资料,整理如下:<br />资料:<br />http://hi.baidu.com/zzublog/blog/item/9bf4b8adb1855dc57dd92a43.html<br />http://hi.bccn.net/space-21499-do-blog-id-13251.html<br />http://linux.ctocio.com.cn/384/8881884.shtml<br /> <br

Chris_Magic的学习笔记 1520

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

atexit剖析

原型: #include int atexit(void(*func)(void));     其中,atexit的参数是一个函数地址,当调用此函数时无须传递任何参数,该函数也不能返回值,atexit函数称为终止处理程序注册程序,注册完成以后,当函数终止是exit()函数会主动的调用前面注册的各个函数,但是exit函数调用这些函数的顺序于这些函数登记的顺序是相反的,我

ua_long的专栏 816

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python atexit模块

版权声明:本文为优快云博主「Calling_Wisdom」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/calling_wisdom/article/details/41829527 Python atexit模块 模块简介 从模块的名字也可以看出来,atexit模块主要的作用就是在程序即将结束之前执...

qyhaill的博客 1507

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

函数atexit

  按照ISO C的规定,一个进程可以登记32个终止处理程序(exit handler),这些终止处理程序(即函数)将由exit自动调用,在exit自动调用之前,需要使用atexit函数登记这些函数。   以下是各实现提供的终止处理程序个数限制: 限制 FreeBSD 8.0 Linux 3.2.0 Mac OS X 10.6.8 Solaris 10 ...

dh6226的博客 338

atexit函数_C ++中带有示例的atexit()函数

atexit函数 C ++ atexit()函数 (C++ atexit() function) atexit() function is a library function of cstdlib header. It is used to set a function that should be executed on exit. Sometimes we need to write suc...

787

atexit()函数

Atexit简介 函数名: atexit 头文件:#include 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: void atexit(void (*func)(void)); 注意:exit调用这些注册函数的顺序与它们 登记时候的顺序相反。同一个函数如若登记多次,则也会被调用多次。

Maple_Leaf_的博客 724

atexit函数的执行顺序_atexit函数详解

对C语言有所了解的人都知道main函数是整个程序的入口,但是其实不然,在内核中可以使用链接器来设置程序的开始地方。当内核使⽤⼀个exec函数执⾏C程序时,在调⽤main函数之前先调⽤⼀个特殊的启动例程,可执⾏程序将此例程指定为程序的起始地址。启动例程从内核获取命令⾏参数和环境变量,然后为调⽤main函数做好准备。前面我们关注的是程序开始进入时的调用函数,而atexit函数是一个特殊的函数,它是在正...

weixin_34333047的博客 625

C++ atexit

(C++11 前) int atexit( /*c-atexit-handler*/* func ); int atexit( /*atexit-handler*/* func ); (C++11 起) int atexit( /*c-atexit-handler*/* func ) noexcept; int atexit( /*atexit-handler*/* func ) noexcept; 若执行成功,返回0,否则返回非0. 当程序正常终止(调用exit()或者由main函数返回)时,.

姜的理想国 1386

linux中的atexit函数

按照ISO C的规定,一个进程可以登记至少32个函数,这些函数将由exit自动调用。     atexit函数是一个特殊的函数,它是在正常程序退出时调用的函数,我们把他叫为登记函数(函数原型:int atexit (void (*)(void))):     函数名: atexit     头文件:#include     功 能: 注册终止函数(即main执行结束后调用的函数)

xy的博客 5104

linux中的atexit

我们知道atexit函数是正常程序退出的时候调用的函数,被称为登记函数,函数原型为:int atexit(void(*)(void))。它的功能是注册终止函数(main函数之后调用的函数),目的是为了让进程正常退出。一、退出方式进程退出有8种方式:其中前三中是正常退出的方式1、从main函数返回2、调用exit3、调用_exit或_Exit后五种为异常退出方式4、最后一个线程从启动历程返回5、最后一

Payshent的博客 1040

atexit模块

文章目录前言实现原理常用方法register标准语法应用举例参考文章 前言 atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。 如果程序是非正常crash,或者通过os._exit()退出,注册的回调函数将不会被调用。 实现原理 我们也可以通过sys.exitfunc来注册回调,但通过它只能注册一个回调,而且还不支持参数。 所以建议大家使用atexit来注册回调函数。但千万不要在程序中同时使用这两种方式,否则通过atexit

weixin_42176112的博客 724

exit与atexit区别

exit与atexit区别  一、exit()函数        函数声明:void exit(int state);        exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束。main函数结束时也会隐式地调用exit函数。exit函数运行时首先会执行由atexi

chenglinhust的专栏 1929

atexit函数的执行顺序_Python模块学习:atexit

前言atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。注:如果程序是非正常crash,或者通过os._exit()退出,注册的回调函数将不会被调用。我们也可以通过sys.exitfunc来注册回调,但通过它只能注册一个回调,而且还不支持参数。所以建议大家使用atexit来注册回调函数。但千万不要在程序中同时使用这两种...

weixin_39825941的博客 137
上一篇: exit
下一篇: windows中的subst与虚拟驱动器(盘符)
linuxwuj
博客等级 码龄16年 25粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值