for和while循环中没有循环条件

Omk*_*ant 10 c loops

while(cond) // fine
for(;cond;) //fine
Run Code Online (Sandbox Code Playgroud)

但当我删除条件部分

while() //syntax compilation error 
for(;;) //Infinite loop
Run Code Online (Sandbox Code Playgroud)

这些循环如何在内部实现?或者,编译器(解析器)如何知道空状态while是错误还是for无限?

我没有找到任何关于此的内容,我认为在C中像我这样的人(初学者)可能会有同样的困惑

P.P*_*.P. 11

该标准要求将for循环的省略条件替换为非零常量:

C11 6.8.5.3 :(强调我的)

6.8.5.3 for语句

1(clause-1; expression-2; expression-3)语句的语句行为如下:表达式expression-2是在每次执行循环体之前计算的控制表达式.在每次执行循环体之后,表达式-3被评估为void表达式.如果clause-1是一个声明,它声明的任何变量的范围是声明的剩余部分和整个循环,包括其他两个表达式; 它是在控制表达式的第一次评估之前按执行顺序到达的.如果子句-1是表达式,则在第一次评估控制表达式之前将其计算为void表达式.

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

由于没有对while循环的这种要求(如果条件被省略),我相信,它留给了编译器的实现.