终止程序
atexit
函数
c
int atexit( void (*func)(void) );
1
注册函数。被注册的函数将在程序正常终止时被逆序调用。同一个函数可以被注册多次。
注:注意到函数原型中的参数,这说明被注册的函数形参列表必须为 void
,且没有返回值。
返回值:成功时返回 0
,失败时返回非零值。
示例:
c
#include <stdlib.h>
#include <stdio.h>
void f1(void) { puts("f1"); }
void f2(void) { puts("f2"); }
int main(void) {
if ( ! atexit(f1) && ! atexit(f2) && ! atexit(f2) ) {
return EXIT_SUCCESS ;
}
return EXIT_FAILURE ;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
可能的输出:
txt
f2
f2
f1
1
2
3
2
3
at_quick_exit
函数
c
int at_quick_exit( void (*func)(void) ); // C11 起
1
大部分特性类似于 atexit()
。通过它注册的函数在程序快速终止(即调用 quick_exit()
)时被调用。
at_quick_exit()
函数是线程安全的。
exit
函数
c
void exit(int exit_code); // c11 前
_Noreturn void exit( int exit_code ); // C11 / C17
[[noreturn]] void exit( int exit_code ); // C23 起
1
2
3
2
3
其中,exit_code
参数表示程序是否成功终止。以 0
或 EXIT_SUCCESS
表示成功,EXIT_FAILURE
表示失败。
该函数用于正常终止程序执行。会进行以下几个步骤的清理:
- 逆序调用注册给
atexit()
的函数。 - 刷新并关闭所有流。
- 删除
tmpfile()
创建的临时文件。
在 main()
函数返回时,会执行 exit()
,其中参数 exit_code
为 return
后表达式的值(如果执行到末尾则为 0
)。
quick_exit
函数
c
_Noreturn void quick_exit( int exit_code ); // C11 / C17
[[noreturn]] void quick_exit( int exit_code ); // C23 起
1
2
2
abort
函数
c
void abort(void);
_Noreturn void abort(void); // C11 / C17
[[noreturn]] void abort(void); // C23 起
1
2
3
2
3