std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
ヘッダーで定義
<cstdlib>
|
||
|
void
abort
(
)
;
|
(C++11以前) | |
|
[
[
noreturn
]
]
void
abort
(
)
noexcept
;
|
(C++11以降) | |
SIGABRT が std::signal に渡されたシグナルハンドラによって捕捉され、かつハンドラが戻らない場合を除き、プログラムの異常終了を引き起こします。
自動 、スレッドローカル (C++11以降) および静的 ストレージ期間 を持つ変数のデストラクタは呼び出されません。 std::atexit() および std::at_quick_exit (C++11以降) で登録された関数も呼び出されません。ファイルなどのオープンされているリソースがクローズされるかどうかは実装定義です。実行が失敗したことを示す実装定義のステータスがホスト環境に返されます。
目次 |
パラメータ
(なし)
戻り値
戻り値を返さないため、なし。
例外
例外を送出しません。
注記
POSIXでは、
abort()
関数が
SIGABRT
シグナルのブロックまたは無視を上書きすることを規定しています。
一部のコンパイラ組み込み関数、例えば
__builtin_trap
(gcc, clang, icc) や
__fastfail
/
__debugbreak
(msvc) は、プログラムを可能な限り高速に終了させるために使用できます。
例
#include <csignal> #include <cstdlib> #include <iostream> class Tester { public: Tester() { std::cout << "Tester ctor\n"; } ~Tester() { std::cout << "Tester dtor\n"; } }; Tester static_tester; // デストラクタは呼び出されない 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; // デストラクタは呼び出されない // ハンドラの設定 auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Setup failed\n"; return EXIT_FAILURE; } std::abort(); // SIGABRTを発生 std::cout << "This code is unreachable\n"; }
出力:
Tester ctor Tester ctor SIGABRT received
関連項目
|
クリーンアップを行った通常のプログラム終了を引き起こす
(関数) |
|
|
std::exit()
呼び出し時に実行される関数を登録する
(関数) |
|
|
(C++11)
|
完全なクリーンアップを行わない高速なプログラム終了を引き起こす
(関数) |
|
(C++11)
|
std::quick_exit
呼び出し時に実行される関数を登録する
(関数) |
|
特定のシグナルに対するシグナルハンドラを設定する
(関数) |
|
|
例外処理が失敗したときに呼び出される関数
(関数) |
|
|
Cドキュメント
for
abort
|
|