为什么要(;;);无限循环

Why is for(;;); an infinite loop?

本文关键字:无限循环 为什么      更新时间:2023-10-16

在C和C 中,我已经无数次写了无限的循环,但是今天是我第一次真正考虑过 - 为什么这是一个无限的循环条件条款为空?人们希望您必须写一些for(;true;);之类的东西才能获得有效的无限循环?

while();不编译, while(;);

也不编译

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

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

C11标准草案§6.8.5.32

可以省略第1条和表达式3。省略的表达式2 被非零常数取代。

类似地,对于C :

C 14标准草案§6.5.3 2

可以省略条件的条件表达式。 缺少的条件使隐含条款等效于 while(true)

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

语法

正式语法:

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

和(强调我的)

上面的语法产生的代码等效于:

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

除了

3)空条件等效于while(true)

对于循环时,条件零件是必要的,不能命令。

语法

attr(optional) while ( condition ) statement