atexit

Обрабатывает указанную функцию на выходе.

Синтаксис

int atexit(
   void (__cdecl *func )( void )
);

Параметры

func
Функция, которую требуется вызвать.

Возвращаемое значение

atexit возвращает 0 в случае успеха или ненулевое значение в случае ошибки.

Замечания

Функция atexit получает адрес функции func , вызываемой при обычном завершении программы. Последовательные вызовы для atexit создания регистра функций, выполняющихся в порядке последней операции (LIFO). Переданные функции atexit не могут принимать параметры. Для хранения регистра функций atexit и _onexit используют кучу. Таким образом, количество функций, которые можно зарегистрировать, ограничено только памятью кучи.

Код в atexit функции не должен содержать никакой зависимости от любой библиотеки DLL, которая уже может быть выгружена при вызове atexit функции.

Microsoft поведение библиотеки DLL: когда библиотека DLL выгружается DLL_PROCESS_DETACHпосле DllMain получения, обратные вызовы библиотеки DLL atexit выполняются в обратном порядке регистрации, причем последний обратный вызов, зарегистрированный первым.

Чтобы создать приложение, соответствующее ANSI, используйте стандартную atexit функцию ANSI (а не аналогичную _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