命名空间
变体
操作

std::abort

来自 cppreference.com
< cpp‎ | utility‎ | program
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库功能测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三元比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
定义在头文件中 <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() 调用时调用的函数
(函数) [编辑]
导致程序快速终止,但不会完全清理
(函数) [编辑]
注册一个将在 std::quick_exit 调用时调用的函数
(函数) [编辑]
为特定信号设置信号处理程序
(函数) [编辑]
异常处理失败时调用的函数
(函数) [编辑]
C 文档 for abort