有效使用goto进行C中的错误管理?
这个问题实际上是不久前在programming.reddit.com 上进行有趣讨论的结果。它基本归结为以下代码:
int foo(int bar){
int return_value = 0;
if (!do_something( bar )) {
goto error_1;
}
if (!init_stuff( bar )) {
goto error_2;
}
if (!prepare_stuff( bar )) {
goto error_3;
}
return_value = do_the_thing( bar );error_3:
cleanup_3();error_2:
cleanup_2();error_1:
cleanup_1();
return return_value;}goto这里的使用似乎是最好的方法,导致所有可能性中最干净,最有效的代码,或者至少在我看来。在Code Complete中引用Steve McConnell :
goto在分配资源,对这些资源执行操作,然后释放资源的例程中很有用。使用goto,您可以清理代码的一部分。goto可以降低忘记在检测到错误的每个位置释放资源的可能性。
此方法的另一个支持来自本节中的“ Linux设备驱动程序”一书。
你怎么看?这种情况goto在C中是否有效?您是否更喜欢其他方法,这些方法会产生更复杂和/或效率更低的代码,但是要避免goto?
慕容3067478
有只小跳蛙
慕容森
蝴蝶不菲
随时随地看视频慕课网APP
相关分类