c语言没有规定压栈顺序,
c语言也没有规定参数的求值顺序,
编译器自己发挥.
但是规定了在实际调用前存在一个序列点.
具体到这个问题,
参数在压栈前被求值,
但是具体先求
哪个参数就不一定了,
可以正着求可以反着求也可以跳着
求,
而且因为逗号之间不存在序列点,
那么4个i是在什么
时刻自加也是不一定的,
c语言能保证的只是当函数被实
际调用时,
4个i的所有自加运算完成.
这也符合c99"在相邻序列点之间的同一对象最多只能被修
改1次"之规定.
所以你的问题无统一解,以后要避免这种摸棱两可的写法.
ps:
这里指的副作用就是i的自加动作.
没听过%i的printf("%d %f %s %c")这就看过
%i真不知道 不会是对i求余吧。。
int i=1
int a=5%i....?
在printf中这两者没有区别但是在scanf中略有不同
比如scanf("%i%d",&a,&b)
如果你输入
012
012
之后a=12
,b=10
%i会把八进制和十六进制转换成十进制后写入