正如其他人所说,你不能有abort()返回并允许执行正常继续。然而,你可以做的是保护一段代码,可能会被类似于try catch的结构调用中止。代码的执行将被中止,但程序的其余部分可以继续。这里是一个演示:
#include <csetjmp>
#include <csignal>
#include <cstdlib>
#include <iostream>
jmp_buf env;
void on_sigabrt (int signum)
{
longjmp (env, 1);
}
void try_and_catch_abort (void (*func)(void))
{
if (setjmp (env) == 0) {
signal(SIGABRT, &on_sigabrt);
(*func)();
}
else {
std::cout << "aborted\n";
}
}
void do_stuff_aborted()
{
std::cout << "step 1\n";
abort();
std::cout << "step 2\n";
}
void do_stuff()
{
std::cout << "step 1\n";
std::cout << "step 2\n";
}
int main()
{
try_and_catch_abort (&do_stuff_aborted);
try_and_catch_abort (&do_stuff);
}
完美的作品在这里,我包括''后。哪个平台? –
使用MSVC++ 2010的Windows 7 x64(不需要在visual studio中包含cstdlib) – codekiddy
那么程序应该被中止,除非信号处理程序执行'longjmp'。如果您希望在此之前打印消息,则可能需要刷新'std :: cout'(或写入'std :: cerr')。 –