C言語 プログラムの終了時に呼ばれる関数を登録 - stdlib.h - [ atexit ]
2008.10.29 Wednesday | by LRESULT
プログラムの終了時に呼ばれる関数を登録するには、atexit()を使います。
この atexit()が少し変わっているのは、引数に関数ポインタを指定するとこです。
登録できる関数は、32個(処理系によって変わるらしい)登録する事ができ、
終了時に呼ばれるのは、最後に登録した関数から順番に呼ばれます。
書式 | int atexit( void (*func)(void) ) |
---|---|
機能 | プログラムの終了時に呼ばれる関数を登録する |
引数 | void (*func)(void) : 登録する関数ポインタ |
戻り値 | 成功すると0を返し、失敗すると0以外を返します。 |
引数に、関数ポインタという少し変わった引数を取りますが、
void func( void ) というような関数のポインタというだけで、それほど難しくは無いです。
Enterキーを押して終了するだけのプログラムに、 func1, func2, func3 を登録して、どのように処理されるかを見てみます。 |
---|
#include <stdio.h> void func1( void ); int main(void) printf( "Enterキーを押すとプログラムを終了します¥n" ); return 0; |
Enterキーを押すとプログラムを終了します 終了中...func3 終了中...func2 終了中...func1 |
---|
と、このように表示されます。 func1, func2, func3 と登録したので、逆順で終了時に呼ばれるわけです。 関数ポインタも、void型なので難しくも無く、関数名を引数として指定するだけで いけますね。 |