quick_exit | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


quick_exit関数

概要 できるだけ速くプログラムを正常終了させる。
ヘッダ stdlib.h
形式 _Noreturn void quick_exit(int status);
引数 status 終了の意味合いを示す値。0 あるいは EXIT_SUCCESS は成功終了を表す。EXIT_FAILURE は失敗終了を表す。これら以外の値を返した場合の動作は、処理系定義
戻り値 なし(呼び出し元に戻ることがない)
詳細

できるだけ速くプログラムを正常終了させる。

まず、at_quick_exit関数で登録されていた関数が、登録された順番の逆順に実行される。その後、引数status を _Exit関数に渡して呼び出す(そして、_Exit関数がプログラムを終了させる)。つまり、exit関数と異なり、出力ストリームのフラッシュ、すべてのストリームのクローズ、tmpfile関数が生成していた一時ファイルの削除を行わないことによって、迅速にプログラムを終了させようとする(こういった終了処理は、プログラムが終了させてから、OS などのシステムが行うことを期待する)。
注意

exit関数とは異なり、atexit関数で登録した関数は呼び出されない。また、signal関数で登録されたシグナルハンドラも呼び出さない。

at_quick_exit関数で登録した関数の中から、さらに quick_exit関数や exit関数、longjmp関数を呼び出した場合の動作は未定義

quick_exit関数の呼び出し中、シグナルが発生した場合の動作は未定義。

gcc の古いバージョン(たとえば gcc 6.4.0 (MinGW-w64))などで、quick_exit関数を使用できないケースがある。バージョンを上げるなどの根本的な解決以外では、exit関数や _Exit関数などのほかの関数に置き換える必要があるが、挙動は異なることに注意。
使用例
#include <stdio.h>
#include <stdlib.h>

void on_quick_exit(void)
{
    puts("on_quick_exit");
}

void on_exit(void)
{
    puts("on_exit");
}

int main(void)
{
    puts("aaaaa");

    at_quick_exit(on_quick_exit);
    atexit(on_exit);
    quick_exit(EXIT_SUCCESS);

    puts("bbbbb");
}

実行結果:

aaaaa
on_quick_exit
関連

quick_exit関数による終了処理の際に呼び出される関数を at_quick_exit関数で登録できる。

quick_exit関数以外にプログラムを終了させる関数として、exit関数_Exit関数がある。

異常終了を表す abort関数がある。
解説章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る