名前空間
変種
操作

std::abort

提供: cppreference.com
< cpp‎ | utility‎ | program
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ(C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
ヘッダ <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 シグナルのブロックおよび無視をオーバーライドすると 規定しています

[編集]

#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 handlerauto previous_handler =std::signal(SIGABRT, signal_handler);if(previous_handler ==SIG_ERR){std::cerr<<"Setup failed\n";returnEXIT_FAILURE;}   std::abort();// Raise SIGABRTstd::cout<<"This code is unreachable\n";}

出力:

Tester ctor Tester ctor SIGABRT received

[編集]関連項目

クリーンアップをしてプログラムを正常終了させます
(関数)[edit]
std::exit が呼ばれたときに呼ばれる関数を登録します
(関数)[edit]
(C++11)
完全なクリーンアップをせずにプログラムを素早く終了させます
(関数)[edit]
quick_exit が呼ばれた時に呼ばれる関数を登録します
(関数)[edit]
特定のシグナルに対するシグナルハンドラを設定します
(関数)[edit]
close