;p=++a+(++a)
我们只能确定++a 自增运算会比 + 加法运算先执行。
但是没有规定一定是左边的++a先执行还是右边的(++a)先执行。也没有规定说加法运算非得等两个自增运算都执行过后再去取a的值做计算(即p=7+7)。它是有可能在计算过程中就把计算结果放到p去(即p=6+7或者p=7+6)
所以题主在测试p=(++a)+(++a)+(++a)
的时候可能p=6+7+8 而cpxuvs计算的是p=8+8+8
C语言的运算规则和数学不太一致就在这里,虽然也是从高到低,但不一定从左往右。我个人揣测这可能和并行运算有关系,这里的几个同级运算++a说不定在单线程里是从左往右依次执行,但是在多线程里面他可能就分别独立计算,这时候谁也管不了哪部分会先计算出结果来。。。这是我理解的方式,没有任何理论依据。只是为了让自己记住
int fun(int a){
if(a==0)return 1;
if(a==1)return 1;
else return fun(a-1)+fun(a-2);//好像这个递归循环,我们也不会知道到底是fun(a-1)先执行还是fun(a-2),属于未定义行为
}