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

时间:2011-02-04 02:56:49

标签: c++ c syntax for-loop

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

for(;;){
    ...
}

5 个答案:

答案 0 :(得分:30)

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

答案 1 :(得分:7)

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

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

例如:

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

会将数字从1到10加起来。

大致相当于以下内容:

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

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

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

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

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

答案 2 :(得分:6)

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

for (setup; test; advance)
    ...

如果“test”为空,则认为是true,循环继续运行。空“设置”和“提前”根本不执行任何操作。

答案 3 :(得分:4)

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

答案 4 :(得分:2)

即使this answer暗示两个构造是等效的,在C语言中for(;;)while(1)(两者都会创建无限循环)之间也存在细微的差别(并且可能是编译器-依赖)。

某些编译器(例如Windriver DIABData)在使用while(1)时抱怨“条件始终为真”。

更改为for(;;)可以消除警告,可能是因为后一个表达式在语义上更强,可以有目的地创建无限循环,并且根本没有“永远为真”的条件(加上写)。

另一方面,正如Adrian在评论中指出的那样,C ++语言对两种结构都没有影响:

C ++标准指出,缺少条件使得隐含的while子句等效于while(true),而for ( for-init-statement condition opt ; expression opt )语句等效于{ for-init-statement while ( condition ) { statement expression ; } }