在 C/C++ 中,以下内容是什么意思?
for(;;){
...
}
这是一个无限循环,相当于 while(true)
。当没有提供终止条件时,条件默认为false(即循环不会终止)。
for(;;)
而不是while(true)
的原因是因为一些编译器会对while(true)
中的常量布尔表达式发出警告。例如,Visual C++会在使用while(true)
时给出“warning C4127: conditional expression is constant”的警告提示。 - In silico在 C 和 C++ (以及很多其他编程语言中),for
循环有三个部分:
例如:
for (i = 1, accum = 0; i <= 10; i++)
accum += i;
将从1加到10(包括10)的数字相加。
大致等同于以下内容:
i = 1;
accum = 0;
while (i <= 10) {
accum += i;
i++;
}
然而,并没有什么要求for
语句中的循环体必须包含任何内容,如果迭代条件缺失,它将被视为true。
所以for(;;)
循环基本上意味着:
换句话说,这是一个无限循环。
循环直到循环内部执行某些 break
,exit
,throw
等语句。基本上,你可以认为一个 for
循环由以下组成:
for (setup; test; advance)
...
true
,循环将继续运行。 空的“setup”和“advance”仅仅不执行任何操作。break
, exit
, 或者 goto
语句才会结束。for(;;)
和while(1)
(都创建了无限循环)之间有微妙的区别。while(1)
时会抱怨“条件始终为真”。for(;;)
可以摆脱警告,这可能是因为后者表达意图更强,故意创建无限循环,并且根本没有“始终为真”的条件(而且写起来更短)。while
子句等效于while(true)
,for(for-init-statement condition opt; expression opt)
语句等效于{ for-init-statement while(condition) { statement expression; } }
。[stmt.for]
节明确规定 缺少条件将使隐含的 while
子句等效于 while(true)
,并且 for ( for-init-statement condition opt ; expression opt ) statement
等价于 { for-init-statement while ( condition ) { statement expression ; } }
。总之,我们得出 for(;;)
等同于 while(true)
。由于您编写了 while(1)
,这可能仅适用于 C
,而不是 C++
? - Adrian W
for(;true;){/*代码*/}
。 - D. Sikilai