运行此程序时,我发现输出为: 4 4. 无法理解原因。
int i = 2;
printf("%d %d", ++i, ++i);
你所经历的是未定义的行为。请阅读有关序列点的信息。逗号是函数调用中的分隔符而不是运算符。
序列点是尘埃落定的时间点,到目前为止已经看到的所有副作用都保证是完整的。C标准中列出的序列点是:
在完整表达式的评估结束时(完整表达式是表达式语句,或任何其他不是任何更大表达式中的子表达式的表达式);在 ||、&&、?: 和逗号运算符处;并在函数调用中(在评估所有参数之后,就在实际调用之前)。
该标准指出
在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,只能访问先验值以确定要存储的值。