为什么使用(;;)?

时间:2013-12-04 22:01:21

标签: c for-loop

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

的内容
for(;;){
}

这将如何工作,为什么它在任何实例中使用?

9 个答案:

答案 0 :(得分:20)

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

在C编程语言书中,由Kernighan& Ritchie一书在第3.5节中介绍:

for (;;) {
    ...
 }
  

是一个无限循环,可能会被其他方式破坏,例如中断或返回。

答案 1 :(得分:8)

是一个像

这样的无限循环
while(true) 
{}

答案 2 :(得分:6)

这相当于一个无限循环,正如许多其他人所解释的那样。但是,很少有人解释为什么这是一个无限循环。

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

for(initialization(s); condition(s); looping command(s))

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

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

for(int i = 0;; i++)
    printf("Iteration: %i\n", i);

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

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

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

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

答案 3 :(得分:5)

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

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

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

答案 4 :(得分:4)

它是一个无限循环。它相当于:

while (true) {
}

C#编译器直接将for (; ;)转换为与while (true)完全相同的构造。

答案 5 :(得分:4)

无限循环

相同
while(true){}

答案 6 :(得分:4)

代码for(;;){}while(true){}while(1){}都代表无限循环。 无限循环是预期运行的软件系统和“无限”时间量的预期。每个操作系统至少有一个 - 这是后台任务或空闲任务的实现方式。

实时系统也使用无限循环,因为系统必须处理异步的事件;

基本上任何运行软件的东西都会以某种方式使用无限循环。

答案 7 :(得分:2)

我不知道为什么没有人回答为什么人们这样做而不是while(true):这是因为while(true)通常会生成一个编译警告,表示循环的条件是不变的。

答案 8 :(得分:0)

这种无限循环可用于微控制器。在主函数中,初始化微控制器的基本功能,然后放入while (1)

void MAIN(void)
{
  Init_Device();
  while(1);
}

微控制器只会等待内部或外部器件的中断(如定时器溢出或准备读取的UART数据),并对这些中断作出反应。