atexit
处理退出时指定的函数。
语法
int atexit(
void (__cdecl *func )( void )
);
参数
func
要调用的函数。
返回值
如果成功,则 atexit
返回 0;如果发生错误,则返回非零值。
备注
当程序正常终止时,向 atexit
函数传递要调用的函数 func
的地址。 对 atexit
的后续调用将创建一个函数注册表,其中的函数按后进先出 (LIFO) 顺序执行。 传递给 atexit
的函数不能采用参数。 atexit
和 _onexit
使用堆保存函数注册表。 因此,可以注册的函数的数量仅受堆内存限制。
atexit
函数中的代码不应该包含在调用 atexit
函数时已卸载的任何 DLL 上的任何依赖项。
若要生成符合 ANSI 的应用程序,请使用 ANSI 标准的 atexit
函数(而不是类似的 _onexit
函数)。
要求
例程 | 必需的标头 |
---|---|
atexit |
<stdlib.h> |
示例
调用 atexit
时,该程序将四个函数推送到要执行的函数堆栈。 当程序退出时,这些程序以后进先出的方式执行。
// crt_atexit.c
#include <stdlib.h>
#include <stdio.h>
void fn1( void ), fn2( void ), fn3( void ), fn4( void );
int main( void )
{
atexit( fn1 );
atexit( fn2 );
atexit( fn3 );
atexit( fn4 );
printf( "This is executed first.\n" );
}
void fn1()
{
printf( "next.\n" );
}
void fn2()
{
printf( "executed " );
}
void fn3()
{
printf( "is " );
}
void fn4()
{
printf( "This " );
}
This is executed first.
This is executed next.