C- atexit() 用于注册一个函数

atexit() 是一个标准 C 库函数,它用于注册一个函数(通常称为退出处理程序或终止函数),该函数将在 main() 函数完成或 exit() 被调用时执行。这对于在程序退出时执行一些清理任务(如关闭文件、释放资源或打印一些消息)非常有用。

原型

c 复制代码
#include <stdlib.h>

int atexit(void (*func)(void));

参数

  • func : 指向要注册的函数的指针。这个函数不应该带有参数,并且应该返回 void。

返回值

  • 如果成功,atexit() 返回 0。
  • 如果失败,返回非零值。

示例

以下是一个简单的示例,展示了如何使用 atexit():

c 复制代码
#include <stdio.h>
#include <stdlib.h>

void cleanup_function1() {
    printf("Cleanup function 1 called.\n");
}

void cleanup_function2() {
    printf("Cleanup function 2 called.\n");
}

int main() {
    atexit(cleanup_function1);
    atexit(cleanup_function2);

    printf("Main function is done!\n");
    return 0;
}

当上述程序运行时,输出是:

复制代码
majn@tiger:~/C_Project/process_project$ ./atexit_demo 
Main function is done!
Cleanup function 2 called.
Cleanup function 1 called.

注意两点:

  1. atexit() 注册的函数在程序退出时的执行顺序与它们注册的顺序相反。
  2. 如果多次注册同一函数,那么该函数将被调用多次。

这种退出处理函数在程序正常终止时才会被调用,即通过 return 从 main() 返回或通过 exit() 函数退出。如果程序是通过其他方法(如接收到终止信号)终止的,这些函数可能不会被调用。

相关推荐
gCode Teacher 格码致知1 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工1 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留1 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu2 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国3 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc4 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu4 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
CoderYanger5 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc
估值探索者5 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口