Mag*_*gam 2 c++ error-handling c++11
通常发生的情况是,当代码面临运行时错误时,它只是以运行时标志终止,我打算做的是在终止前打印自定义消息 & 我希望“返回 0”,即在打印自定义消息后正常终止代码,就好像运行时永远不会一样发生了。
知道怎么做吗?
程序可能终止的原因有多种。
第一:抛出一个未捕获的异常。如果那是您正在寻找的,那么请遵循 Paul Evans 给出的建议。使用 C++11,您可能想要调用get_terminate(),并在新的终止处理程序结束时调用返回的终止处理程序:
terminate_handler old_terminate_handler = nullptr;
void new_terminate_handler() {
std::cerr << "terminate due to error" << std::endl;
if( old_terminate_handler != nullptr ) {
old_terminate_handler();
} else {
std::abort();
}
}
int main(int, char**) {
old_terminate_handler = get_terminate();
set_terminate(new_terminate_handler);
}
Run Code Online (Sandbox Code Playgroud)
第二:收到一个信号,通常会终止程序。安装一个信号处理程序来捕获它:
void sig_handler(int signal) {
new_terminate_handler();
}
// ...
std::signal(SIGTERM, sig_handler);
std::signal(SIGSEGV, sig_handler);
std::signal(SIGINT, sig_handler);
// ...
Run Code Online (Sandbox Code Playgroud)
第三:操作系统可能只是决定终止进程。这要么由普通信号信号(例如 SIGTERM)完成,要么由无法处理的信号(例如 SIGKILL)完成。在第二种情况下,您没有机会在程序内部注意到这一点。第一种情况已经涵盖。