<分区>
假设我们有一个递归函数,f
,如果输入不正确,它可能会失败。只有在 f
运行时才能检测到输入中的错误。
在 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);
}