C言語 プログラムの終了時に呼ばれる関数を登録 - stdlib.h - [ atexit ]

2008.10.29 Wednesday | by LRESULT


ログラムの終了時に呼ばれる関数を登録するには、atexit()を使います。

この atexit()が少し変わっているのは、引数に関数ポインタを指定するとこです。

登録できる関数は、32個(処理系によって変わるらしい)登録する事ができ、
終了時に呼ばれるのは、最後に登録した関数から順番に呼ばれます。


atexit
書式 int atexit( void (*func)(void) )
機能 プログラムの終了時に呼ばれる関数を登録する
引数 void (*func)(void) : 登録する関数ポインタ
戻り値 成功すると0を返し、失敗すると0以外を返します。


引数に、関数ポインタという少し変わった引数を取りますが、
void func( void ) というような関数のポインタというだけで、それほど難しくは無いです。




サンプルコード
Enterキーを押して終了するだけのプログラムに、
func1, func2, func3 を登録して、どのように処理されるかを見てみます。

#include <stdio.h>
#include <stdlib.h>

void func1( void );
void func2( void );
void func3( void );

int main(void)
{
  atexit( func1 );
  atexit( func2 );
  atexit( func3 );

  printf( "Enterキーを押すとプログラムを終了します¥n" );
  getchar();

  return 0;
}
void func1( void )
{
  printf( "終了中...func1¥n" );
}
void func2( void )
{
  printf( "終了中...func2¥n" );
}
void func3( void )
{
  printf( "終了中...func3¥n" );
}




結果
Enterキーを押すとプログラムを終了します

終了中...func3
終了中...func2
終了中...func1
と、このように表示されます。
func1, func2, func3 と登録したので、逆順で終了時に呼ばれるわけです。
関数ポインタも、void型なので難しくも無く、関数名を引数として指定するだけで
いけますね。

カテゴリ:C言語 stdlib.h | 23:26 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

http://simd.jugem.jp/trackback/92

トラックバック