atexit
終了時に指定された関数を処理します。
構文
int atexit(
void (__cdecl *func )( void )
);
パラメーター
func
呼び出される関数。
戻り値
atexit
は正常終了した場合は 0、エラーが発生した場合は 0 以外の値を返します。
解説
atexit
関数には、プログラムが正常に終了したときに呼び出される関数 func
のアドレスが渡されます。 atexit
を連続して呼び出すと、後入れ先出し法 (LIFO) 順で実行される関数のレジスタが作成されます。 atexit
に渡される関数はパラメーターを受け取ることはできません。 atexit
と _onexit
は、ヒープを使用して関数のレジスタを保持します。 したがって、登録可能な関数の数は、ヒープ メモリの量によってのみ制限されます。
atexit
関数のコードには、atexit
関数が呼び出されたときに既にアンロードされている可能性がある DLL への依存関係を含めることはできません。
ANSI 準拠のアプリケーションを生成するには、ANSI 規格の atexit
関数を使用します (同様の _onexit
関数ではない)。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
atexit |
<stdlib.h> |
例
このプログラムは、atexit
が呼び出された時に実行される関数のスタック上に 4 つの関数をプッシュします。 プログラムの終了時に、後入れ先出し法でこれらのプログラムが実行されます。
// 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.