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

问题描述 投票:0回答:2

我问这个问题只是为了获取知识(因为我认为这与像我这样的初学者无关)。
我读到 C 程序员更喜欢

 for(; ;) {....}

结束

 while(1) {....}

出于效率原因,无限循环。一种形式的循环确实比另一种形式更有效,还是仅仅是风格问题?

c loops infinite-loop
2个回答
7
投票

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

关于偏好:

C 编程语言,Kernighan 和 Ritchie

使用表格

for (;;)

无限循环。

编程实践,Kernighan 和 Pike,

也比较喜欢

for (;;)

“对于无限循环,我们更喜欢 for(;;),但 while(1) 也很流行。除了这些形式之外,不要使用任何其他形式。”

PC-Lint

也比较喜欢

for (;;)

716 while(1) ... -- 找到了 while(1) ... 形式的构造。尽管这代表了需要布尔值的上下文中的常量,但它可能反映了编程 无限循环以此构造为前缀的策略。因此,它被赋予一个单独的编号,并被置于信息类别中。无限循环前缀更传统的形式是 for(;;)

历史上

for (;;)
优于
while (1)
的基本原理之一(也许不是最重要的,我不知道)是,一些旧的编译器会为
while (1)
构造生成测试。

另一个原因是:

for(;;)
是最短的形式(以字符数计),并且
for(;;)
不包含任何幻数(正如OP问题评论中的@KerrekSB所指出的)。


0
投票

要考虑的另一个结构:

while (true) {
    /* ... */
}

不过,您必须包含

stdbool.h
,这是在 C99 中添加的。 这是一种更现代的方法,对于不熟悉 C 语言的人来说通常更容易阅读。

© www.soinside.com 2019 - 2024. All rights reserved.