终止程序
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
可能的输出:
f2
f2
f11
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