/*********************************************
* @brief 注册程序快速退出前的清理函数
* @param func 要注册的清理函数
* @return 示成(0)或失败(非 0)
********************************************/
int at_quick_exit(void (*func)(void));
!subtitle:说明
注册程序快速退出前的清理函数。
在程序快速退出(调用 quick_exit)时,清理函数将按照注册的相反顺序被调用。
清理函数的数量限制由具体实现决定,至少支持 32 个。
!subtitle:参数
func - 要注册的清理函数
!subtitle:返回值
成功返回 0
失败返回非 0
#include <stdio.h>
#include <stdlib.h>
void func1(void)
{
printf("清理1\n");
}
void func2(void)
{
printf("清理2\n");
}
int main(void)
{
at_quick_exit(func1); // 先注册,后执行
at_quick_exit(func2); // 后注册,先执行
quick_exit(EXIT_SUCCESS); // 快速退出
return 0; // 不会执行
}
说明:
通过 at_quick_exit 注册了 func1 和 func2 两个清理函数,通过 quick_exit 退出时执行。
func1 先注册后运行
func2 后注册先运行
运行结果:
清理2
清理1
C17 standard (ISO/IEC 9899:2018):
7.22.4.3 The at_quick_exit function (p: 255)
C11 standard (ISO/IEC 9899:2011):
7.22.4.3 The at_quick_exit function (p: 351)