我已经在 Stack Overflow 上的答案和问题中看到过几次,这是一个以逗号分隔的列表作为 for 循环的循环条件,例如:for(int i = 0, int j = 0 ; i < 2, j < 4; i++, j++) { ... }
.这是如何工作的?
逗号分隔的条件如何在 C 中的 for 循环中工作?
喜欢:
for(int i = 0, int j = 1 ; i < 5, j < 4; i++, j++) { ... }
这不是因为条件需要是一个评估表达式而无效吗?多个逗号分隔的表达式如何在 for 循环中计算为一个表达式?
上述表达式用分号括起来; i < 5, j < 4;
,这应该是循环的条件。还是我错了?
最佳答案
for
的语法带有声明的循环是 (6.8.5):
for ( declaration expression_opt ; expression_opt ) statement
这个
for(int i = 0, int j = 1 ; i < 5, j < 4; i++, j++) { }
不解析是因为
int i = 0, int j = 1 ;
作为声明(或 C 中的任何句子形式)在语法上无效,但
for(int i = 0, j = 1; i < 5, j < 4; i++, j++) { }
会解析,因为
int i = 0, j = 1;
是一个有效的声明(具有多个包含初始化器的声明器)并且
i < 5, j < 4
是一个有效的包含逗号运算符的表达式,原样
i++, j++
.
(请注意 i < 5, j < 4
与 j < 4
具有相同的效果,因为逗号表达式是从左到右计算的,并且使用最后一部分的值,并且由于 i < 5
在这里没有副作用,所以整个表达式仅相当于 j < 4
。您可能想要 i < 5 && j < 4
。)
for
的原始形式循环(没有声明)你有(6.8.5)
for ( expression_opt ; expression_opt ; expression_opt ) statement
分号用于分隔 3 个(可选)表达式。
在包含声明的表单中,第一个分号被解析为声明的一部分
for ( declaration expression_opt ; expression_opt ) statement
。
关于c - 逗号分隔的表达式作为 for 循环中的条件如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59611230/