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
循环的这种要求(如果条件被省略),我相信,它留给了编译器的实现.