相关疑难解决方法(0)

有效使用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;
}
Run Code Online (Sandbox Code Playgroud)

goto这里的使用似乎是最好的方法,导致所有可能性中最干净,最有效的代码,或者至少在我看来.在Code Complete中引用Steve McConnell :

goto在分配资源,对这些资源执行操作,然后释放资源的例程中很有用.使用goto,您可以清理代码的一部分.goto可以降低忘记在检测到错误的每个位置释放资源的可能性.

此方法的另一个支持来自本节中的" Linux设备驱动程序"一书.

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

c error-handling exception-handling goto

88
推荐指数
5
解决办法
2万
查看次数

是否使用goto?

这个问题可能听起来有些陈词滥调,但我处于这种情况.

我正在尝试实现一个有限状态自动机来解析C中的某个字符串.当我开始编写代码时,我意识到如果我使用标签来标记不同的状态并使用goto从一个状态跳转到另一个案件来了.

在这种情况下使用标准的break和flag变量非常麻烦,很难跟踪状态.

什么方法更好?最重要的是,我担心这会给我的老板留下不好的印象,因为我正在实习.

c parsing goto finite-automata

20
推荐指数
6
解决办法
4032
查看次数