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.

另请参阅

进程和环境控制
abort
exit_Exit_exit
_onexit, _onexit_m