Namespaces
Variants

std::abort

来自 zh.cppreference.net
 
 
 
 
定义于头文件 <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 时要调用的函数
(函数)
为特定信号设置信号处理程序
(函数)
异常处理失败时调用的函数
(函数)
C 文档 for abort