C

时间:2015-11-17 14:53:10

标签: c for-loop initialization

考虑这个C-snippet:

int a;
int b;
for (a = 0, b = a + 1; a < N; a++)
    /* Something. */

C规范是否明确要求编译器按照它们出现的顺序将语句保留在for-initializer中?

我特别试图避免未定义的行为,例如,如果a位于外部/全局范围内,并且规范在此特定区域中并不严格。换句话说,我想确保上面的示例对编译器有明确的定义,而不是输入a = ++a + b++;等灰色区域。

1 个答案:

答案 0 :(得分:2)

不是特别在for-initializer中,将首先计算逗号运算符(a = 0)左侧的表达式,然后评估右侧(b = a + 1)。

N1256 6.5.17逗号运算符

  

逗号运算符的左操作数被计算为void表达式;有一个   评估后的序列点。然后评估右操作数;结果有它   类型和价值。