Namespaces
Variants

std::abort

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
Swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <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; // 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)
完全なクリーンアップを行わない高速なプログラム終了を引き起こす
(関数)
std::quick_exit 呼び出し時に実行される関数を登録する
(関数)
特定のシグナルに対するシグナルハンドラを設定する
(関数)
例外処理が失敗したときに呼び出される関数
(関数)