为什么使用(;;)?

use*_*089 6 c for-loop

我见过代码(在C中),其中包含类似于:

for(;;){
}
Run Code Online (Sandbox Code Playgroud)

这将如何工作,为什么它在任何情况下使用?

oua*_*uah 20

这是拥有无限循环的惯用方法.

在C编程语言书中,由Kernighan&Ritchie出版,第3.5节介绍了它:

for (;;) {
    ...
 }
Run Code Online (Sandbox Code Playgroud)

是一个无限循环,可能是通过其他方式打破,如休息或返回.

  • 看起来像惯用的C给我. (11认同)
  • 我不知道我是否会说这是惯用的方式......这肯定是一种方式. (5认同)

BRA*_*mel 8

是一个无限循环的东西

while(true) 
{}
Run Code Online (Sandbox Code Playgroud)


Boo*_*oom 6

这相当于无限循环,正如许多其他人所解释的那样.但是,很少有人解释为什么这会作为无限循环执行.

一个for循环可以分解为三个部分:

for(initialization(s); condition(s); looping command(s))
Run Code Online (Sandbox Code Playgroud)

实际上并不需要这些字段.如果没有提供条件,就没有什么可以阻止命令运行.这是因为for循环查找false语句.没有条件,没有什么是错误的,因此循环无限期地运行.

因此,要使for循环无限,您只需要提供一个条件.这意味着这也是一个有效的无限循环:

for(int i = 0;; i++)
    printf("Iteration: %i\n", i);
Run Code Online (Sandbox Code Playgroud)

为了便于阅读,并确保第二个分号不是拼写错误,一些程序员可能会在它们之间放置一个空格,或者true作为条件.

老实说,我更喜欢while(true),因为这是一个明确的无限循环.使用while(1)也可以,但'1'是整数,而不是布尔值.虽然它相当于true,但并不总是意味着true.

在这三种类型的无限循环之间,for(;;)具有最少的字符(7).while(1)排名第二,共8个字符,while(true)第11个字符.

我想某些程序员喜欢在可读程序上使用低字节数,但我不建议使用for(;;).虽然相当,但我认为使用while(true)是更好的做法.


JBL*_*JBL 5

一个for循环需要三个表达式,用分号分隔,并且是完全可选的:

  • 初始化(例如int i=0)
  • 条件(例如i < 10)
  • 事后的想法(例如i++)

在这种情况下,三个表达式都是空的,因此没有条件会使循环停止,从而创建一个无限循环,除非像break(将退出循环)或return使用流控制指令.