++和++ 入栈顺序(65)

直接上代码++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int minuus(int a, int b)
{
cout << a << endl;
cout << b << endl;
return a-b;
}
int main()
{
int cc = 4;
cout << minuus(cc++, cc++) << endl;
while (cc--)
{
cout << "a" << endl;
}
system("pause");
return 0;
}

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的处理并不是很好。

// //