atexit
指定された関数を終了時に処理します。
int atexit(
void (__cdecl *func )( void )
);
パラメーター
- func
呼び出される関数。
戻り値
正常終了の場合、atexit は 0 を返します。エラーが発生した場合は、0 以外の値を返します。
解説
atexit 関数には、プログラムの正常終了時に呼び出す関数 (func) のアドレスが渡されます。 atexit への呼び出しが連続した場合は、関数のレジスタが作成されます。これらの関数は、後入れ先出し (LIFO: last-in, first-out) の順で実行されます。 atexit に渡される関数はパラメーターを取ることができません。 atexit および _onexit は、ヒープを使用して関数のレジスタを保持します。 このため、レジスタに登録できる関数の数は、ヒープ メモリによってだけ制限されます。
atexit 関数には、atexit 関数が呼び出されたときにアンロードされている可能性がある DLL に依存するコードを含めることはできません。
ANSI 準拠のアプリケーションを生成するには、類似の _onexit 関数ではなく、ANSI 標準の atexit 関数を使用します。
必要条件
ルーチン |
必須ヘッダー |
---|---|
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 " );
}
同等の .NET Framework 関数
System::Diagnostics::Process::Exited