“for(;;)”是什么意思?
在C / C ++中,以下是什么意思?
for(;;){ ... }
它是一个无限循环,相当于while(true)
。 如果未提供终止条件,则条件默认为true
。
循环直到循环中的某些break
, exit
, throw
等语句执行。 基本上,您可以将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(;;)
允许摆脱警告,可能是因为后一个表达式在语义上更强大,故意创建无限循环,并且根本没有“始终为真”条件(加上它的写入时间更短)。