假设我们有一个递归函数f,如果输入不正确,则可能会失败。只能在f运行时检测到输入错误。
在C中,通常的方法是什么来在发生错误时直接从f()中断返回到原始调用函数?
setjmp / longjmp是此处的惯用解决方案吗?
玩具示例:
在C中,通常的方法是什么来在发生错误时直接从f()中断返回到原始调用函数?
setjmp / longjmp是此处的惯用解决方案吗?
玩具示例:
void g() {
int arr[] = {1, 2, -3, 4};
int result = f(0, sizeof(arr)/sizeof(int) - 1, arr);
/* if f() was successful: */
printf("%d\n", );
/* if error occurred in f: do something else */
}
int f(int n, int i, int *arr) {
if (i < 0)
return n;
/*
if (arr[i] < 0) <-- "erroneous input"
break to g()
*/
return f(arr[i] + n, i-1, arr);
}
if(arr[i]<0) return g();
不起作用,或者返回一些特殊值(如 -1),并在调用函数中处理它呢? - user684934f()
已经从g()
被调用,所以 OP 想要回到调用者。 - Chowlett