namespace std {
[[noreturn]] void quick_exit(int status) noexcept;
}
概要
後処理をせずに、プログラムを終了させる。
exit()
関数は、オブジェクトのデストラクタを呼び出して破棄してからプログラムを終了させるが、この関数はその破棄処理を行わずに、プログラムを終了させる。これは、リソースの破棄を、OSに任せることを意味する。
この関数の主な用途は、マルチスレッドプログラムの同期をキャンセルしてプログラムを終了させる、というものである。たとえば、ユーザーが作成したスレッドクラスのデストラクタが、スレッド終了まで待機するものだったとしたら、デストラクタを実行するexit()
関数では、スレッドが終了するまで、プロセスを終了できない。そういった状況でこの関数を使用することにより、プロセスの終了を阻害するような破棄処理をOSに任せて、即座にプロセスを終了させられる。
パラメータとして渡されたstatus
は、プログラムの終了コードとして使用される。
- プログラムを正常終了させたい場合は、
0
もしくはEXIT_SUCCESS
をパラメータstatus
に設定する。 - プログラムを異常終了させたい場合は、
EXIT_FAILURE
をパラメータstatus
に設定する。
効果
at_quick_exit()
関数で登録された関数が、逆順で呼び出される。- 登録された関数で例外が送出された場合、
std::terminate()
関数が呼び出され、プログラムが異常終了する。
- 登録された関数で例外が送出された場合、
- この関数を呼び出したときに生存しているオブジェクトは、破棄されない。
- Cストリームのバッファはフラッシュされない。
- 登録された関数が呼び出されたあと、
_Exit(status)
を呼び出す。
戻り値
この関数は決して返らない。
例
#include <cstdlib>
void f()
{
std::quick_exit(0); // プログラムを正常終了させる
}
int main()
{
f();
}
12
#include <cstdlib>
void f()
{
std::quick_exit(0); // プログラムを正常終了させる
}
int main()
{
f();
}
出力
バージョン
言語
- C++11
処理系
- Clang: 3.4 ✅
- GCC: 4.8 ✅
- ICC:
- Visual C++: 2015 ✅
関連項目
名前 | 説明 |
---|---|
at_quick_exit |
quick_exit 関数でプログラムが終了するときに呼ばれる関数を登録する |
exit |
プログラムを終了させる |