所以我有一些情况需要跳出当前函数并返回到函数的开头,其中一些包括错误检查(我还没有学过try
,throw
或者catch
还没有),最近我一直在使用递归忽略递归不像 a 那样起作用goto
并且只是返回到函数的开头而是创建自身的单独副本的事实,因此如果我使用递归来捕获诸如客户端输入错误之类的东西,如果客户端犯了足够多的错误,它可以导致潜在的内存泄漏。
我想知道是否有一个特定的功能可以让我“重新启动”一个功能。
作为使用伪伪代码的示例:
int foo(){
//prompt for and receive input
if(!matchCondition)
//stop foo() and restart foo()
//does something
}
我能想到的唯一另一件事是将函数调用放入循环中,但这不是最佳选择,例如,如果函数在main()
我不能完全将调用放入main
循环中main
,而不创建至少一个重复项. 另一个不起作用的例子是,如果函数需要返回没有限制的东西,因此可以自然地产生“错误代码”而不会发生错误。
bool ifError=1;
while(ifError){
ifError = foo();
}
int foo(){
//prompt for and receive input
if(!matchCondition)
return 1;
//do something
return 0;
}
我唯一能想到的是一个goto
指向foo()
被调用行的语句。如果它存在,但我知道这是我能做的最糟糕的事情。