名前空間
変種
操作

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 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

[編集] 関連項目

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