正如其他人所說,你不能有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')。 –