for循环的增量步骤中是否可以有多个语句?

Daw*_*ang 1 c for-loop

for循环的增量步骤中使用具有多个语句的代码是否合法,如此处所示?

for ( ... ; ... ; q++, t += expression)
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,表达式t += expression似乎没有被执行,但是当我放入t += expressionfor循环体时,它工作正常.

作为参考,这是我的代码:

代码如下所示:

for(/* irrelevant */; /* ... */; q++, t -= p[q][t])
{ /* do some dp... */}

// t do not change when I print it out.
Run Code Online (Sandbox Code Playgroud)

第二版:

for(/* irrelevant */; /* ... */; q++)
{ 
  /* do some dp... */
  t -= p[q][t];
}

// t updates this time
Run Code Online (Sandbox Code Playgroud)

tem*_*def 9

是的,代码

for (/* .. */; /* .. */; q++, t += expression)
Run Code Online (Sandbox Code Playgroud)

是合法的,应该执行代码t += expression.这使用了C的逗号运算符,这是一个鲜为人知的运算符,在这种情况下几乎完全使用它.逗号运算符的作用就是写作

A, B;
Run Code Online (Sandbox Code Playgroud)

在哪里AB是表达式,评估两者AB按顺序,然后产生值B.所以,例如,写作

int x = (1, 2);
Run Code Online (Sandbox Code Playgroud)

将赋予x2,因为它是逗号表达式中的最后一个术语.

在这个for循环的上下文中,写作时

q++, t += expression
Run Code Online (Sandbox Code Playgroud)

代码将执行q++,然后执行t += expression,然后整个表达式求值为新值t.但是,由于for循环丢弃循环体中第三个表达式的值,因此不会在任何地方使用此值.