有效使用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
?
有只小跳蛙
慕容森
蝴蝶不菲
相关分类