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

cha*_*era 6 c c++ for-loop

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

while(); 不编译也不编译 while(;);

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

ex *_*ilo 12

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

C11标准草案§6.8.5.32

可以省略子句-1和表达式3.省略的表达式-2由非零常量替换.

同样,对于C++:

C++ 14标准草案§6.5.32

可以省略条件表达式中的任何一个或两者.缺失条件使隐含的while子句等同于 while(true).