考虑以下C代码片段:
int a;
int b;
for (a = 0, b = a + 1; a < N; a++)
/* Something. */
C规范是否明确要求编译器按其出现顺序将语句保留在for-initializer中?
我专门试图避免未定义的行为,例如,如果a
是在外部/全局范围内,并且规范在此特定领域中并不严格。换句话说,我想确保上面的示例为编译器定义了明确的定义,并且不要输入诸如的灰色区域a = ++a + b++;
。
不是特别在for-initializer中,逗号运算符(a = 0
)左边的表达式将首先被求值,然后右边的(b = a + 1
)将被求值。
N1256 6.5.17逗号运算符
逗号运算符的左操作数被评估为void表达式;评估后有一个序列点。然后评估正确的操作数;结果具有其类型和价值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句