我应该使用`while(true)`或`for(;;)`(在支持两者的语言中)?

时间:2010-08-06 15:01:08

标签: for-loop while-loop

  

可能重复:
  When implementing an infinite loop, is there a difference in using while(1) vs for(;;) vs goto (in C)?

while (true)for (;;)都意味着“永远循环”的语言中,我应该使用哪种语言?

7 个答案:

答案 0 :(得分:12)

在我看来,while(true)更清楚。

任何半合适的编译器都会以相同的方式编译(至少在优化时) 因此,您应该选择更清楚的形式。

答案 1 :(得分:9)

for(;;)

没有明显的语义价值。而

while(true)
任何相当聪明的非程序员都可以理解

,因为它更接近自然语言的等价物。

答案 2 :(得分:3)

按重要性排序:

  1. 无论您当前的代码风格指南是什么
  2. 当前代码中使用的是什么
  3. 无论您的经理喜欢什么
  4. 无论你的同事喜欢什么
  5. 无论你喜欢什么
  6. 在某些情况下可以撤销3和4的顺序;)

    编辑:我个人更喜欢“while(true)”(包括空格),但我很少到达列表中的第5点。

答案 3 :(得分:3)

我更喜欢

do {
  // ....
} while(true);

它从循环开始的显着位置降低了无限循环概念的实现选择。

如果这是C ++或C,只需创建自己的宏来更好地抽象概念(在这种情况下,使用while(TRUE)for(;;)并不相关):

#define forever for(;;)

这也可以以某种方式适应C#:

  forever: {
    // ...
    goto forever;
  }

goto在这种情况下不是邪恶的)

答案 4 :(得分:1)

我更喜欢(真实),因为我认为它更直观,更优雅,更有哲理。

然而,这最终只是风格问题。

答案 5 :(得分:1)

任何体面的开发人员都会过去而不会感到困惑。用你想要的任何东西。

答案 6 :(得分:0)

我最近问的一个问题:Difference between for(;;) and while (true) in C#?

虽然我的语言具体,但其中有几个人就这个问题发表了意见。

就个人而言,我更喜欢while (true)因为我觉得for (;;)遗漏了几乎必要的部分。我对它有点强迫症,我知道它们不是必需的,但我觉得没有参数的for看起来不完整。显然,在某些情况下你不需要某些参数,但在保证这样的循环的情况下,while (true)在语法上看起来更完整。

总而言之,这很有道理(以一种好的方式)。与您合作的开发人员应该能够理解它们是同一个东西,并且(根据我的问题至少在C#中)它们编译成完全相同的东西。任何因为你做了一个而不是另一个而抱怨的人似乎都认为他们的优先级无关紧要。