namespace std {
[[noreturn]] void _Exit(int status) noexcept;
}
概要
後処理をせずに、プログラムを終了させる。
exit()
関数は、オブジェクトのデストラクタを呼び出して破棄してからプログラムを終了させるが、この関数はその破棄処理を行わずに、プログラムを終了させる。これは、リソースの破棄を、OSに任せることを意味する。
quick_exit()
との違いは、プロセス終了時に呼び出される関数を登録できない点である。
パラメータとして渡されたstatus
は、プログラムの終了コードとして使用される。
- プログラムを正常終了させたい場合は、
0
もしくはEXIT_SUCCESS
をパラメータstatus
に設定する。 - プログラムを異常終了させたい場合は、
EXIT_FAILURE
をパラメータstatus
に設定する。
効果
- この関数を呼び出したときに生存しているオブジェクトは、破棄されない。
- Cストリームのバッファはフラッシュされない。
atexit()
で登録された関数は呼び出されない。- プロセスを終了する。
戻り値
この関数は決して返らない。
備考
この関数は、C99で導入され、C++に取り込んだものである。C++では、この関数の代わりにquick_exit()
関数を使用することを推奨する。
例
#include <iostream>
#include <cstdlib>
struct X {
~X()
{
std::cout << "called X's destructor" << std::endl;
}
};
void f()
{
X x; // このオブジェクトのデストラクタは、呼び出されない。
std::_Exit(0); // プログラムを正常終了させる
}
int main()
{
f();
}
21
#include <iostream>
#include <cstdlib>
struct X {
~X()
{
std::cout << "called X's destructor" << std::endl;
}
};
void f()
{
X x; // このオブジェクトのデストラクタは、呼び出されない。
std::_Exit(0); // プログラムを正常終了させる
}
int main()
{
出力
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.3 ✅
- ICC:
- Visual C++: 2015 ✅
関連項目
名前 | 説明 |
---|---|
exit |
プログラムを終了させる |
quick_exit |
後処理をせずに、プログラムを終了させる |