为什么是(;;);无限循环?

时间:2017-03-02 03:13:35

标签: c++ c for-loop

多年来我在C和C ++中多次写过无数循环,但是今天我第一次真正想到它 - 为什么条件子句为空时它是一个无限循环?人们会期望你必须写一些像for(;true;);这样的东西来获得有效的无限循环吗?

while();无法编译,也不会while(;);

无论如何,我喜欢for(;;);语法并经常使用它,但是将空条件块视为true是特殊情况还是在C或C ++中有其他情况将空条件表达式解释为真?

2 个答案:

答案 0 :(得分:12)

C标准明确描述了for循环的这种行为:

  

C11 Draft Standard §6.8.5.3 2

     

可以省略子句-1和表达式-3。省略的表达式-2   被非零常数替换。

同样,对于C ++:

  

C++14 Draft Standard §6.5.3 2

     

可以省略条件表达式中的任何一个或两者。   缺少条件会使隐含的子句等效于   的而(真)

答案 1 :(得分:4)

行为由语言(C ++)定义。对于for loop,条件部分是可选的:

  

语法

     

形式语法:

attr(optional) for ( init-statement condition(optional) ; iteration_expression(optional) ) statement

和(强调我的)

  

上述语法产生的代码相当于:

{
    init_statement 
    while ( condition ) { 
        statement 
        iteration_expression ; 
    }
}
     

除了

     

3)空状态相当于while(true)

对于while loop,条件部分是必要的,不能省略。

  

语法

attr(optional) while ( condition ) statement