atexit
函数 <cstdlib>
C |
int atexit (void (*func)(void)); |
C++98 |
extern "C" int atexit (void (*func)(void));
extern "C++" int atexit (void (*func)(void)); |
C++11 |
extern "C" int atexit (void (*func)(void)) noexcept;
extern "C++" int atexit (void (*func)(void)) noexcept; |
设置退出时要执行的操作
当程序正常终止时,将自动调用func所指向的函数,不带参数。
如果不同调用指定了多个
atexit函数,它们会以栈的方式执行
(即最后指定的函数是在退出时第一个执行的函数)。
一个函数可以注册为在退出时多次执行。
如果在
exit之后调用
atexit,则调用是否成功取决于特定的系统和库实现(未指定的行为)。
如果一个注册了
atexit的函数抛出了一个异常,当调用终止时它没有提供一个处理程序,terminate会自动调用(c++)。
特定的库实现可能会对
atexit中可以注册的函数调用的数量施加限制,但不能少于32个。
☲ 参数
function
要调用的函数。该函数不返回任何值,也不接受任何参数。
☉ 返回值
如果函数成功注册,则返回一个零值。
如果失败,则返回一个非零值。
☣ 示例
/* atexit example */
#include <stdio.h> /* puts */
#include <stdlib.h> /* atexit */
void fnExit1 (void)
{
puts ("Exit function 1.");
}
void fnExit2 (void)
{
puts ("Exit function 2.");
}
int main ()
{
atexit (fnExit1);
atexit (fnExit2);
puts ("Main function.");
return 0;
}
|
输出:
Main function.
Exit function 2.
Exit function 1.
↭ 数据竞争
并发地调用这个函数不会引入数据竞争(c++):调用会在进程级正确地同步。
❆ 异常(c++)
无抛出保证:此函数从不抛出异常。
🍄 另请参阅
exit |
终止调用进程(function ) |
abort |
中止当前进程(function ) |