std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
定义于头文件
<cstdlib>
|
||
|
void
abort
(
)
;
|
(C++11 前) | |
|
[
[
noreturn
]
]
void
abort
(
)
noexcept
;
|
(C++11 起) | |
除非 SIGABRT 正被传递给 std::signal 的信号处理器捕获且该处理器未返回,否则将导致程序异常终止。
具有自动 、线程局部 (since C++11) 和静态 存储期 的变量的析构函数不会被调用。通过 std::atexit() 和 std::at_quick_exit (since 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; // 析构函数不会被调用 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; // 析构函数不会被调用 // 设置处理器 auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Setup failed\n"; return EXIT_FAILURE; } std::abort(); // 触发 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
|
|