以下代码运行时不会出现任何错误或警告
#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;
}
但是,书Let Us C(Yashwant Kanetkar)表示在for循环的测试表达式中只允许使用一个表达式。(参见本书第115页)。
我不确定标准。 for循环的测试表达式中是否允许使用多个表达式?
编辑:我当然可以加入这两个表达式但是当我在website上找到上面的代码时,我感到很沮丧。我的问题是,这是否是有效的C代码?
答案 0 :(得分:7)
条件
i < p, j < q
是允许的,但可能不是预期的,因为它会丢弃第一个表达式的结果并仅返回j < q
的结果。 comma operator计算逗号左边的表达式,丢弃它然后评估右边的表达式并返回它。
如果要测试多个条件,请使用逻辑AND运算符&&
代替
i < p && j < q
答案 1 :(得分:5)
您可以使用布尔和(&amp;&amp;)
将它们链接在一起for(i = 0, j = 0; (i < p) && (j < q); i++, j++){
以上内容不会在循环中打印出任何内容,因为(i < p)
条件会立即失败,因为i&amp; p都是相同的值(0)。
更新:您的示例有效(但很愚蠢)C,因为如果您启动i = 30,您的循环仍会执行2次,因为忽略逗号分隔列表中的第一个结果。
答案 2 :(得分:3)
如果要测试这两个条件,请使用&&
运算符。
代码中发生的事情与逗号运算符,
的工作方式有关。
评估i < p
和j < q
,但只有for循环检查第二个表达式j < q
的结果。
答案 3 :(得分:1)
for(i = 0, j = 0; i < p && j < q; i++, j++){
答案 4 :(得分:1)
即使我已经读过Yashwant Kanetkar先生的那本书。它确实说for循环中只允许一个条件,但是你可以通过使用逻辑运算符来连接它们来为for循环添加多个条件。在我以前读过的其他书中,说过只允许一个条件。