c的优先级结合性的理解

为什么说这样的代码不好?
不是优先级先调用函数?结合性从左到右计算么?
不就是输出-10吗?初学不是很懂,最好应该怎么理解?

img

判断优先级和结合性的前提是,相邻操作符,而这里的 3个函数调用操作符并不是相邻的,所以你并不知道他会先调用那个函数

img

优先级和结合形并不能确定唯一的计算路径,列如下面这个表达式也是如此:

img

answer = fun() - fun() * fun(); 从左往右执行, fun() ==> ++count; 得到 函数的返回值为:2; fun() ==> count 为静态变量,所以return ++count; 此时函数的返回值为 3 ; fun() ==> 此时函数返回值为 4。所以 answer = fun() - fun() * fun() = 2 - 3 * 4 = -10。

是输出-10啊

从左到右结合,count在程序运行结束后才会被释放

img


可以看下c语言参考手册中的 c语言-运算符优先级

乘的优先级是比加要高,但是它调用顺序是从左到右的,是先计算乘法,不是先调用