对一个运算结果的疑惑

int i=3;
int a=0;
a=(++i)+(++i)+(++i);
printf("%d",a);

输出a的结果为什么是16 而不是15

跟踪了一下这个
a=(++i)+(++i)+(++i); 改写成 a = a1 + a2 + a3
过程应该是这样:
先计算 a= a1 + a2, 这个时候是计算两次 ++是5, 也就是 a1=a2=5,算的10
在计算 a= 10 + a3, 这个时候是计算1次 ++是6, 原来是5, 所以是 a = 10 + 6 =16

编译器貌似是取了两个操作数就开始计算, 这个有点意思

未定义行为,讨论这种表达式的结果无意义。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^