for循环中是否允许多个条件?

运行以下代码时不会出现任何错误或警告

#include int main(){ int i, j; int p = 0, q = 2; for(i = 0, j = 0; i < p, j < q; i++, j++){ printf("HelloWorld\n"); } return 0; } 

然而, Let Us C(Yashwant Kanetkar)一书中说,for循环的测试表达式中只允许有一个表达式(参见本书第115页)。

我不确定标准。 for循环的测试表达式中是否允许多个表达式?

编辑:我当然可以加入这两个表达式但是当我在这个网站上找到上面的代码时,我感到很沮丧。 我的问题是这个有效的C代码是不是?

条件

 i < p, j < q 

是允许但可能不是预期的,因为它丢弃第一个表达式的结果并返回j < q的结果。 逗号运算符计算逗号左侧的表达式,丢弃它然后计算右侧的表达式并返回它。

如果要测试多个条件,请使用逻辑AND运算符&&

 i < p && j < q 

您可以使用布尔值和(&&)将它们链接在一起

 for(i = 0, j = 0; (i < p) && (j < q); i++, j++){ 

以上不会在循环中打印出任何内容,因为(i < p)条件会立即失败,因为i&p都是相同的值(0)。

更新 :你的例子是有效的(但很愚蠢)C因为如果你开始i = 30你的循环仍然会执行2次,因为忽略逗号分隔列表中的第一个结果。

如果要测试这两个条件,请使用&&运算符。

您的代码中发生的事情与逗号运算符的工作方式有关。

评估i < pj < q ,但仅通过for循环检查第二表达式j < q的结果。

 for(i = 0, j = 0; i < p && j < q; i++, j++){ 

甚至我也读过Yashwant Kanetkar先生的那本书。 它确实说for循环中只允许一个条件,但是你可以通过使用逻辑运算符连接它们来为for循环添加多个条件。 在我以前读过的其他书中,说过只允许一种情况。