-2
#include<stdio.h>
int main()
{
int i=8,j=5,x;
i++;
printf("%d,%d,%d,%d",i++,j,x=i+i+++j++,i);
}
输出中:10,6,24,11 我的最终值是11,x应等于26.为什么它的值是24?怎么做了很多增量和减量操作的一个变量一个printf函数工作
#include<stdio.h>
int main()
{
int i=8,j=5,x;
i++;
printf("%d,%d,%d,%d",i++,j,x=i+i+++j++,i);
}
输出中:10,6,24,11 我的最终值是11,x应等于26.为什么它的值是24?怎么做了很多增量和减量操作的一个变量一个printf函数工作
答案很简单 - 它没有,所以不要做:)
从http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf第10页注15:“个体经营的操作数的评价和个人表达的子表达式的是未测序。”换句话说,如果你有“模棱两可的”语句(比如这些增量),那么操作和评估的顺序是不确定的 - 即留给编译器编写者。
所以,只是另一个避免编写模糊代码的原因。