while(cond) // fine
for(;cond;) //fine
但是当我删除条件部分时
while() //syntax compilation error
for(;;) //Infinite loop
这些循环内部是如何实现的?
或者,编译器(解析器)如何知道中的空条件while
是错误并且在for
作为无限?
我没有特别发现任何关于这个的东西,我认为像我这样的人(初学者)在 C 中可能有同样的困惑
该标准要求省略的条件for
循环被替换为非零常数:
From C11 6.8.5.3:(强调我的)
6.8.5.3 for 语句
1 (子句-1;表达式-2;表达式-3)的语句
语句的行为如下:表达式 expression-2 是
每次执行之前评估的控制表达式
循环体。表达式 expression-3 被评估为 void
每次执行循环体后的表达式。如果子句 1 是
声明,它声明的任何变量的范围是余数
声明和整个循环,包括其他两个
表达式;按照执行顺序先于第一个到达
控制表达式的评估。如果子句 1 是
表达式,它在第一个之前被评估为 void 表达式
控制表达式的评估。134)
2 子句 1 和表达式 3 都可以省略。省略的表达式-2 由非零常数替换。
由于没有这样的要求while
循环(如果条件被省略),我相信,它留给编译器的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)