|
|
vc6编译环境:
minuus(cc, cc++);while(–cc) 输出:4,4,0 aaaa
minuus(++cc, ++cc);while(–cc) 输出:6,5,0 aaaaa
minuus(cc++, ++cc);while(–cc) 输出:5,5,0 aaaaa
分析:首先vc6对参数入栈默认是从右到左的,然后入栈参数必定存在赋值临时参数(意思就是先拷贝了数据值再进行操作,不然第一个示例中:cc++确实执行了,却没有传入值)。
vs2012编译环境:
minuus(cc, cc++);while(–cc) 输出:5 4 1 5(和想象中的一样)
minuus(++cc, ++cc);while(–cc) 输出:6 6 0 6(不同了)
minuus(cc++, ++cc);while(–cc) 输出:5 6 -1 6(不同了)
minuus(cc++, cc++);while(–cc) 输出:5 4 1 6(不同)
minuus(cc, ++cc) :5 5 0 5
minuus(++cc, cc++) 6 4 2 6
minuus(++cc, cc) 5 5 0 5
分析:首先它会对++c进行预先处理, 所以cc会自加,玩了后它才开始参数从右到左进行入栈处理。
有cc++就处理。
相比vc6对数据的自加进行了修改,但是对++c的处理并不是很好。