考虑这个C-snippet:
int a;
int b;
for (a = 0, b = a + 1; a < N; a++)
/* Something. */
C规范是否明确要求编译器按照它们出现的顺序将语句保留在for-initializer中?
我特别试图避免未定义的行为,例如,如果a
位于外部/全局范围内,并且规范在此特定区域中并不严格。换句话说,我想确保上面的示例对编译器有明确的定义,而不是输入a = ++a + b++;
等灰色区域。
答案 0 :(得分:2)
不是特别在for-initializer中,将首先计算逗号运算符(a = 0
)左侧的表达式,然后评估右侧(b = a + 1
)。
N1256 6.5.17逗号运算符
逗号运算符的左操作数被计算为void表达式;有一个 评估后的序列点。然后评估右操作数;结果有它 类型和价值。