gpt4 book ai didi

c - 在 C 中有效使用 goto 进行错误管理?

转载 作者:太空狗 更新时间:2023-10-29 16:15:21 24 4
gpt4 key购买 nike

这个问题实际上是一个 interesting discussion 的结果不久前在 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 似乎是最好的方法,它产生了所有可能性中最干净和最有效的代码,或者至少在我看来是这样。引用 Steve McConnell 在 Code Complete 中的话:

The goto is useful in a routine that allocates resources, performs operations on those resources, and then deallocates the resources. With a goto, you can clean up in one section of the code. The goto reduces the likelihood of your forgetting to deallocate the resources in each place you detect an error.

对这种方法的另一种支持来自 Linux 设备驱动程序 一书,在 this section 中.

你怎么看?这种情况是否是 C 语言中 goto 的有效用法?您是否更喜欢其他产生更复杂和/或效率更低的代码但避免 goto 的方法?

最佳答案

FWIF,我发现您在问题示例中给出的错误处理习语比目前答案中给出的任何替代方法都更具可读性和更容易理解。虽然 goto 通常不是一个好主意,但如果以简单统一的方式完成,它对于错误处理很有用。在这种情况下,即使它是 goto,它也会以定义明确且或多或少结构化的方式使用。

关于c - 在 C 中有效使用 goto 进行错误管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/788903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com