相关疑难解决方法(0)

我可以使用break来退出多个嵌套for循环吗?

是否可以使用该break函数退出几个嵌套for循环?如果是这样,你会怎么做呢?你还可以控制休息退出的循环次数吗?

c++ for-loop break nested-loops

282
推荐指数
12
解决办法
21万
查看次数

会使用goto泄漏变量吗?

goto跳过代码而不调用析构函数和事物是真的吗?

例如

void f() {
   int x = 0;
   goto lol;
}

int main() {
   f();
lol:
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

会不会x泄露?

c++ goto

91
推荐指数
1
解决办法
7867
查看次数

有效使用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万
查看次数

C或C++中良好的getos的例子

在这个主题中,我们看一下gotoC或C++ 的良好用法示例.它的灵感来自人们投票的答案,因为他们认为我在开玩笑.

摘要(标签从原始标签更改为使意图更清晰):

infinite_loop:

    // code goes here

goto infinite_loop;
Run Code Online (Sandbox Code Playgroud)

为什么它比替代品更好:

  • 这是具体的. goto是导致无条件分支的语言构造.替代方案取决于使用支持条件分支的结构,具有退化的始终为真的条件.
  • 标签记录了意图,没有额外的评论.
  • 读者不必扫描早期介入代码breakS(尽管它仍然可能无原则黑客模拟 continue与早期goto).

规则:

  • 假装gotophobes没有赢.据了解,上述内容不能用于实际代码中,因为它违背了既定惯用语.
  • 假设我们都听说'Goto被认为有害',并且知道goto可以用来写意大利面条代码.
  • 如果你不同意一个例子,那就单独批评技术优点('因为人们不喜欢goto'不是技术原因).

让我们看看我们是否可以像成年人一样谈论这个问题.

编辑

这个问题现在好了.它产生了一些高质量的答案.感谢大家,尤其是那些认真对待我的小循环示例的人.大多数怀疑论者都担心缺乏范围.正如@quinmars在评论中指出的那样,你总是可以在循环体上放置大括号.我顺便注意到for(;;)并且while(true)也没有给你免费的大括号(并且省略它们会导致烦恼的错误).无论如何,我不会浪费任何更多的脑力这个小事-我可以用无害的习惯生活for(;;)while(true)(一样好,如果我想继续我的工作).

考虑到其他反应,我发现许多人认为goto你总是需要以另一种方式重写.当然,你可以goto通过引入一个循环,一个额外的标志,一堆嵌套的ifs或其他什么来避免,但为什么不考虑是否goto可能是这项工作的最佳工具?换句话说,人们准备忍受多少丑陋以避免使用内置语言功能达到预期目的?我的看法是,即使添加一面旗帜,也要付出太高的代价.我喜欢我的变量来表示问题或解决方案域中的事物.'唯一要避免goto'不削减它.

我会接受第一个给出C模式分支到清理块的答案.国际海事组织,这是goto所有已发布答案的最强情况,当然,如果你通过一个仇恨必须通过避免它的扭曲来衡量它.

c c++ goto

79
推荐指数
11
解决办法
15万
查看次数

使用goto是一种合法的方式来打破两个循环?

我正在解决Project Euler上的问题9 .在我的解决方案中,我使用"goto"语句来打破两个for循环.问题如下:

毕达哥拉斯三元组是一组三个自然数,abc,为此,

a ^ 2 + b ^ 2 = c ^ 2

例如,3 ^ 2 + 4 ^ 2 = 9 + 16 = 25 = 52.

恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc.

我的解决方案是在c ++中:

int a,b,c;
const int sum = 1000;
int result = -1;
for (a = 1; a<sum; a++){
    for (b = 1; b < sum; b++){
            c = sum-a-b;
            if (a*a+b*b == c*c){
                result = a*b*c;
                goto found;
            }
    } …
Run Code Online (Sandbox Code Playgroud)

c++ goto

19
推荐指数
3
解决办法
6510
查看次数