我问这个问题只是为了获取知识(因为我认为这与像我这样的初学者无关)。
我读到 C 程序员更喜欢
for(; ;) {....}
结束
while(1) {....}
出于效率原因,无限循环。一种形式的循环确实比另一种形式更有效,还是仅仅是风格问题?
两种构造在行为上是等效的。
关于偏好:
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所指出的)。
要考虑的另一个结构:
while (true) {
/* ... */
}
不过,您必须包含
stdbool.h
,这是在 C99 中添加的。
这是一种更现代的方法,对于不熟悉 C 语言的人来说通常更容易阅读。