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

本着问题的精神, 你的循环测试是在顶部还是底部? :

你使用哪种风格进行无限循环,为什么?

  • 而(真){}
  • do {} while(true);
  • for(;;){}
  • label:… goto label;

while(true) {} 

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

 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 */ } 
 #define forever for(;;) forever { /*stuff*/ } 

请来自(23)

 while(1) { //do it } 

这就是我滚动的方式。

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

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

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

 10 some l33t code 20 goto 10 

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

有些语言提供了一个repeat { }结构,它本身会永远循环。 我发现for(;;) { }构造在视觉上与它最相似,因为它for()构造的法线非常不同。 这是无限循环的一个重要属性, while(1) { }实际上没有。

无限尾递归;)

它有点依赖编译器……

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

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

让火焰开始……

如果循环是一个真正的无限循环(即没有中断条件 – 只有外部事件可以终止线程/进程的执行),那么我实际上更喜欢标签和goto 。 原因如下:

首先,使用whilefordo ... while ,都意味着循环可能会终止。 即使终止条件永远不可能实现,这些结构的语法含义是存在一些终止条件。

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

第三,唯一真正的无限循环是无条件地跳回到循环开始的循环。 只有goto完全符合这个目的。

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

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

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

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

 for(;;); 

填充文字。

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

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

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

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

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

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