A-A*_*A-A 1 c++ program-entry-point function break
我有3个功能:my_fun1(),my_fun2(),和my_fun3()。
main()调用my_fun1()哪个调用my_fun2(),哪个调用又调用my_fun3()。
根据 中的一些预定义条件my_fun3(),我希望我的程序直接返回到调用main()行的函数my_fun1()。
是否有可能直接去my_fun3()到main()呢,还是有一些条件增加my_fun2()和my_fun1()实现这一目标?
嗯,有一种方法可以使用longjmp/直接跳转到代码中的另一个点setjmp,但我不会告诉你如何做,因为这是一个糟糕的主意。就像它得到的一样糟糕。所以让我们谈谈好的解决方案:-)。
最明显的方法是使用异常。像这样:
int my_fun3() {
throw 1; // could be any type...
}
int my_fun2() {
my_fun3();
}
int my_fun1() {
my_fun2();
}
int main() {
try {
my_fun1();
} catch(int n) { // catch the same type you threw...
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想使用异常(可能是这种情况,有些人可能会争辩说,如果返回 main的原因不是“异常” ,这将是对异常的滥用),下一个最直接的方法是使my_fun1, my_fun2, 和my_fun3返回值意味着“完成”,假设int一个值小于0意味着“回到主”。您的调用结构如下所示:
int my_fun3() {
// ...
if(some_condition) {
return -1;
}
return 0;
}
int my_fun2() {
// ...
int r = my_fun3();
if(r < 0) {
return r;
}
// ...
return 0;
}
int my_fun1() {
// ...
int r = my_fun2();
if(r < 0) {
return r;
}
// ...
return 0;
}
int main() {
my_fun1();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11846 次 |
| 最近记录: |