首先要问你的递归函数为什么需要强制退出? 是函数设计问题?或者更不不需要递归?
如果真要退出,最好的办法还是exception。在你的recursion中,如果有使用对象并在构造中申请内存,在析构中释放内存,你只能抛出异常来做完美的退出了。下面代码演示怎么使用异常和递归,但没有加入前面提到的对象概念。
int recursion(int time) throw (std::exception)
if (time > 100)
char buf[10];
memset(&buf, 0x0, 10*sizeof(char));
throw std::exception(itoa(time, buf, 10));
time++;
return recursion(time);
int main(int argc, char *argv[])
recursion(9);
catch(std::exception& e)
std::cout << e.what() << std::endl;
return 0;
}
setjump/longjump在C里面是可以的,但是在C++这里存在缺陷。如果你的递归函数里面有分配内存,那么setjump/longjump可能会跳过析构函数从而泄漏内存。