[C]适合使用goto的时机
时间:2014-07-21 08:46 来源: 我爱IT技术网 作者:山风
大家都知道goto对源代码是有害的,会造成源代码难以被看懂。不过goto并不完全没有用,有些情况使用goto会让源代码看起来比较清楚。
错误处理
由于C的语法没有例外处理,在处理错误时有很多种写法,我个人觉得使用goto的这个写法的可读性比较好。这也是目前我唯一想到适合使用goto地方,你可以在Linux kernel的源代码中时常看到这种用法:
- void foo()
- {
- if (!doA())
- goto exit;
- if (!doB())
- goto error;
- if (!doC())
- goto error;
- /* everything has succeeded */
- return;
- error:
- /* error recovering */
- exit:
- return;
- }
另一个常用的范例是用来release resource,以下源代码当检查vector中的数据是错误时,会使用goto跳到release resource的源代码。
- double sum_vector(double *vector1, double *vector2, int *error) {
- double sum = 0;
- *error = 1;
- if(!checkVectorValid(vector1)) goto invalidVector;
- if(!checkVectorValid(vector2)) goto invalidVector;
- /* sum of vectors */
- *error = 0;
- invalidVector:
- free(vector1);
- free(vector2);
- return 0;
- }
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
