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)
|
导致程序快速终止而不完全清理
(函数) |
|
(C++11)
|
注册在调用
std::quick_exit
时要调用的函数
(函数) |
|
为特定信号设置信号处理程序
(函数) |
|
|
异常处理失败时调用的函数
(函数) |
|
|
C 文档
for
abort
|
|