std::abort
提供: cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| ヘッダ <cstdlib> で定義
|
||
void abort(); |
(C++11未満) | |
[[noreturn]] void abort() noexcept; |
(C++11以上) | |
std::signal に渡されたシグナルハンドラによって SIGABRT がキャッチされそのハンドラが戻らない場合を除き、プログラムを異常終了させます。
自動、スレッドローカル (C++11以上)および静的記憶域期間を持つ変数のデストラクタは呼ばれません。 std::atexit() および std::at_quick_exit (C++11以上) で登録された関数も呼ばれません。 ファイルのような開いているリソースが閉じられるかどうかは処理系定義です。 実行の失敗を表す処理系定義のステータスがホスト環境に返されます。
引数
(なし)
戻り値
(なし)
例外
(なし)
ノート
POSIX は abort() 関数が SIGABRT シグナルのブロックおよび無視をオーバーライドすると 規定しています。
例
Run this code
#include <csignal>
#include <iostream>
#include <cstdlib>
class Tester {
public:
Tester() { std::cout << "Tester ctor\n"; }
~Tester() { std::cout << "Tester dtor\n"; }
};
Tester static_tester; // Destructor not called
void signal_handler(int signal)
{
if (signal == SIGABRT) {
std::cerr << "SIGABRT received\n";
} else {
std::cerr << "Unexpected signal " << signal << " received\n";
}
std::_Exit(EXIT_FAILURE);
}
int main()
{
Tester automatic_tester; // Destructor not called
// Setup handler
auto previous_handler = std::signal(SIGABRT, signal_handler);
if (previous_handler == SIG_ERR) {
std::cerr << "Setup failed\n";
return EXIT_FAILURE;
}
std::abort(); // Raise SIGABRT
std::cout << "This code is unreachable\n";
}
出力:
Tester ctor
Tester ctor
SIGABRT received
関連項目
| クリーンアップをしてプログラムを正常終了させます (関数) | |
| std::exit が呼ばれたときに呼ばれる関数を登録します (関数) | |
(C++11) |
完全なクリーンアップをせずにプログラムを素早く終了させます (関数) |
(C++11) |
quick_exit が呼ばれた時に呼ばれる関数を登録します (関数) |
| 特定のシグナルに対するシグナルハンドラを設定します (関数) | |
abort の C言語リファレンス
| |