无限循环 - 顶部还是底部?

时间:2008-10-22 01:16:20

标签: c++ c coding-style

本着Do your loops test at the top or bottom?等问题的精神:

您使用哪种样式用于无限循环,为什么?

  • while(true){}
  • do {} while(true);
  • for(;;){}
  • label:... goto label;

19 个答案:

答案 0 :(得分:36)

while(true) {}

它似乎最有效地传达了循环的含义。

答案 1 :(得分:22)

for (;;)
{
    /* No warnings are generated about constant value in the loop conditional
       plus it is easy to change when you realize you do need limits */ 
}

答案 2 :(得分:12)

#define forever for(;;)

forever {
    /*stuff*/
}

答案 3 :(得分:9)

请来自(23)

答案 4 :(得分:7)

while(1)
{
//do it 
}

这就是我的表现。

答案 5 :(得分:6)

我喜欢使用 for(;;)方法,因为 MSVC ++ 编译器抱怨关于while循环方法:

void main()
{
  while(1) // test.cpp(5) : warning C4127: conditional expression is constant
  {
  }

  for(;;)
  {
  }
}

答案 6 :(得分:5)

我更喜欢while(1)while(true) - 这是最清楚的。 do { } while(true)似乎是不必要的混淆。同样地,for(;;)可能会让以前从未见过的人感到困惑,而while(true)则非常直观。而且绝对没有理由做label: ... goto label;,这更令人困惑。

答案 7 :(得分:3)

10 some l33t code
20 goto 10

答案 8 :(得分:3)

我在C风格的语言中使用for (;;),在不支持该结构的语言中使用while true

我在K& R中学习了for (;;)方法,对我而言,它总是感觉像是惯用语。

答案 9 :(得分:3)

无限尾递归;)

这有点依赖于编译器...

答案 10 :(得分:3)

我通常使用for(;;) { },我一直认为这是“永远”。

某些语言提供了repeat { }构造,它将永远本地循环。我发现for(;;) { }构造在视觉上与它最相似,因为它与普通的for()构造有很大不同。这是while(1) { }实际上没有的无限循环的重要属性。

答案 11 :(得分:2)

让火焰开始......

如果循环是 true 无限循环(即没有中断条件 - 只有外部事件可以终止线程/进程'执行),那么我实际上更喜欢标签和{{ 1}}。原因如下:

首先,使用gotowhilefor都意味着循环可能会终止。即使终止条件永远不可能实现,这些结构的语法含义 某些终止条件。

其次,使用循环结构引入了额外级别的缩进。我讨厌没有必要的缩进。它浪费了宝贵的柱状房地产。

第三,唯一 true 无限循环是无条件跳回循环开头的循环。只有do ... while符合此目的。

事实是,我并不在乎它。他们都完成了工作,大多数都会产生完全相同的装配说明。 然而,生成的程序集很可能是无条件跳转(如果你的优化程序值得一试),它直接映射到哪个C结构,孩子们?那是对的......你的老朋友goto

答案 12 :(得分:1)

for(;;);

填充文字。

答案 13 :(得分:1)

for(;;)就是我经常看到的。

答案 14 :(得分:1)

offtopic:如果你想到你想表达什么,你通常不需要无限循环。

答案 15 :(得分:1)

为自己编写代码时,我用于(;;)。其他人往往会被其语法所困惑,因此对于其他人必须看到/使用的代码,我使用while(true)。

答案 16 :(得分:0)

无限循环是一个坏主意,但在实践中并不总是如此。

我更喜欢while(1){}但是要确保循环中的某些内容可以导致它爆发。

答案 17 :(得分:0)

我通常使用while() {},但在得知for(;;) {}不是某种疯狂的无效语法后,我肯定会使用更独特的选项。

将无限循环与实际条件区分开来,你知道。

答案 18 :(得分:0)

我现在更喜欢“for (;;)”成语,因为它似乎更多地“伸出”了。我过去习惯使用“while (true)”成语,因为我认为它更好地表达了意图,但我已经转换,因为我认为“for (;;)”成语已经足以充分表达意图以及我相信通过更加明显更好。

有点像Stroustrup如何使C ++中的新演员有目的地丑陋 - 所以他们坚持下去。