関数 unexpected() は、起動されたときに、set_unexpected() に、
最後に引き数として渡された関数を呼び出します。
set_unexpected() がまだ呼び出されていない場合、unexpected()
は terminate() を呼び出します。
関数 terminate() は、起動されたときに、set_terminate() に、 最後に引き数として渡された関数を呼び出します。 set_terminate() がまだ呼び出されていない場合、terminate() は abort() を呼び出し、 これによってプログラムが終了します。
set_unexpected() および set_terminate() を使用して、unexpected() および terminate() によって呼び出されるユーザー定義関数を登録できます。 関数 set_unexpected() と set_terminate() は、 標準ヘッダー・ファイルに入っています。 これらの各関数は、その戻りの型およびその引き数の型として、戻りの型が void で引き数なしの関数を指すポインターを持っています。 引き数として提供する関数を指すポインターは、対応する特殊な関数によって呼び出される関数になります。 set_unexpected() への引き数が unexpected() によって呼び出される関数になり、set_terminate() への 引き数が terminate() によって呼び出される関数になります。
set_unexpected() および set_terminate() は、 それぞれに特有の関数 (unexpected() および terminate() ) から以前に呼び出された関数を指すポインターを戻します。 戻り値を保管することによって、後で元の特有の関数を復元して、unexpected() と terminate() が、 再び terminate() と abort() を呼び出すようにすることができます。
set_terminate() を使用して、ユーザー独自の関数を登録する場合、その関数は、呼び出し元にはリターンせず、 プログラムの実行を終了する必要があります。
関連参照