“for(;;)”是什么意思?

在C / C ++中,以下是什么意思?

for(;;){ ... } 

它是一个无限循环,相当于while(true) 。 如果未提供终止条件,则条件默认为true

循环直到循环中的某些breakexitthrow等语句执行。 基本上,您可以将for循环视为包含:

 for (setup; test; advance) ... 

如果“test”为空,则认为是true ,并且循环继续运行。 空“设置”和“提前”根本不做任何事情。

在C和C ++(以及其他一些语言)中, for循环有三个部分:

  • 一个预循环部分,在循环开始之前执行;
  • 一个迭代条件部分,虽然为true,但它将执行循环体; 和
  • 迭代后部分,在循环体的每次迭代之后执行。

例如:

 for (i = 1, accum = 0; i <= 10; i++) accum += i; 

将从1到10的数字相加。

它大致相当于以下内容:

 i = 1; accum = 0; while (i <= 10) { accum += i; i++; } 

但是,没有任何要求for语句中的部分实际上包含任何内容,如果缺少迭代条件,则认为它是真的。

所以for(;;)循环基本上只是意味着:

  • 不做任何循环设置;
  • 永远循环(尽管有rest,退货等等); 和
  • 不做任何迭代后处理。

换句话说,它是一个无限循环。

无限循环,一直持续到break(),exit()或goto语句。

即使这个答案表明两个构造都是等价的,但在C语言中( for(;;)while(1) (它们都创建了无限循环)之间存在细微差别(并且可能依赖于编译器)。

一些编译器(例如Windriver DIABData)在使用while(1)时抱怨“条件总是正确的”。

更改为for(;;)允许摆脱警告,可能是因为后一个表达式在语义上更强大,故意创建无限循环,并且根本没有“始终为真”条件(加上它的写入时间更短)。