在发生错误的情况下,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);}解决方法 选项包括:
>从f()返回状态标志,指示成功或失败.这会导致错误从错误发生的深度一次冒出一个级别,因此可能不是您想要的.请注意,如果您需要解除f()可能在每个级别声明的任何分配或释放资源,这是唯一安全的选项.>完全按照建议使用setjmp()和longjmp()来模拟抛出异常的效果并直接跳转到错误处理代码.
总结以上是内存溢出为你收集整理的在C中摆脱递归的惯用方法是什么?全部内容,希望文章能够帮你解决在C中摆脱递归的惯用方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)