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