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

Nik*_*nka 0 c for-loop

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

#include<stdio.h>

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

sim*_*onc 9

条件

i < p, j < q
Run Code Online (Sandbox Code Playgroud)

是允许但可能不是预期的,因为它丢弃第一个表达式的结果并j < q仅返回结果.该逗号操作评估的逗号左侧的表达式,然后丢弃它计算右边的表达式,并返回它.

如果你想测试多个条件使用逻辑运算符&&,而不是

i < p && j < q
Run Code Online (Sandbox Code Playgroud)


vog*_*tix 7

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

for(i = 0, j = 0; (i < p) && (j < q); i++, j++){
Run Code Online (Sandbox Code Playgroud)

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

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