9

据我了解“for(;;)”没有初始条件,没有测试条件,也没有增量条件,因此永远循环,我很好奇为什么测试条件在每个循环中都成功。

是否空表达式“;” 在 C 中评估为真?或者这是编译器处理的特殊情况?

一个类似但不相关的问题

4

2 回答 2

17

这是由forC 语言中的语句定义的。6.8.5.3/2“for声明”:

子句 1 和表达式 3 都可以省略。 省略的表达式 2 被非零常量替换

于 2010-01-31T06:06:54.603 回答
5

C 语言没有“空表达式”之类的东西。如果语句中缺少任何表达式,从for语法上讲,这意味着整个表达式被省略,不是说它在那里,而是空的。

一个for省略了第二个表达式的循环永远循环,因为for语句的规范是这样说的。即它是一个专门针对for单独的专用功能,而不是更通用的功能。

另外(一个术语的挑剔)只有第二个表达式实际上是一个条件。第一个和第三个并不是真正的“条件”。

于 2010-01-31T06:16:11.913 回答