无限循环 – 顶部还是底部?
本着问题的精神, 你的循环测试是在顶部还是底部? :
你使用哪种风格进行无限循环,为什么?
- 而(真){}
- 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
。 原因如下:
首先,使用while
, for
和do ... while
,都意味着循环可能会终止。 即使终止条件永远不可能实现,这些结构的语法含义是存在一些终止条件。
其次,使用循环结构引入了额外级别的缩进。 我讨厌没有必要的缩进。 它浪费了宝贵的柱状房地产。
第三,唯一真正的无限循环是无条件地跳回到循环开始的循环。 只有goto
完全符合这个目的。
事实是我并不是那么关心它。 他们都完成了工作,大多数都会产生完全相同的assembly说明。 然而 ,生成的程序集很可能是一个无条件的跳转(如果你的优化程序值得一试),它直接映射到哪个C结构,孩子们? 那是对的……你的老朋友goto
。
在为自己编写代码时,我使用(;;)。 其他人往往会被其语法所困惑,因此对于其他人必须看到/使用的代码,我使用while(true)。
offtopic:如果你想想你要表达什么,你通常不需要无限循环。
for(;;)就是我经常看到的。
for(;;);
填充文字。
无限循环是一个坏主意,但在实践中并不总是如此。
我更喜欢while(1){}但是要确保循环内的某些东西可以导致它爆发。
我通常使用while() {}
,但在得知for(;;) {}
不是某种疯狂的无效语法之后,我肯定会使用更独特的选项。
你知道,将无限循环与实际条件区分开来。
我现在更喜欢“ for (;;)
”成语,因为它似乎更多地“伸出”了。 我过去习惯使用“ while (true)
”成语,因为我认为它更好地表达了意图,但我已经切换了因为我认为“ for (;;)
”成语已经足够充分地表达意图以及我相信通过更加明显更好。
有点像Stroustrup如何使C ++中的新演员有目的地丑陋 – 所以他们坚持下去。