“for(;;)”优先于“while(1)”

时间:2013-06-30 20:44:09

标签: c loops infinite-loop

我只是为了知识而问这个问题(因为我认为它与像我这样的初学者没有任何关系)。
我读过C程序员更喜欢

 for(; ;) {....}

结束

 while(1) {....}

为了效率的原因进行无限循环。一种形式的循环比另一种循环更有效,或者仅仅是风格问题,这是真的吗?

1 个答案:

答案 0 :(得分:6)

这两种结构在行为上是等效的。

关于偏好:

C编程语言,Kernighan&里奇

使用表格

for (;;)

无限循环。

编程实践,Kernighan&派克,

也更喜欢

for (;;)

  

“对于无限循环,我们更喜欢(;;)但是(1)也很受欢迎。不要使用除这些形式之外的任何东西。”

PC-皮棉

也更喜欢

for (;;)

  

716 while(1)... - 找到形式的构造,而(1)......被找到。虽然这表示期望布尔值的上下文中的常量,但它可以反映编程   无限循环以此结构为前缀的策略。因此,它被赋予一个单独的数字,并被放入信息类别。更常规形式的无限循环前缀是(;;)

历史上for (;;)优先于while (1)的理由之一(可能不是最重要的,我不知道)是一些旧的编译器会为{{1}生成测试构造。

另一个原因是:while (1)是最短的形式(字符数),for(;;)也不包含任何幻数(在OP问题评论中由@KerrekSB指出)