关于i++的RTCu和RTCs模式下运行的小测试。
来做个小小的测试吧
int fun(int a, int b)
{
printf("fun a=%d ",a);
printf("b=%d\n",b);
return a+b;
}
int fun6(int a,int b,int c, int d)
{
printf("fun6 a=%d ",a);
printf("b=%d ",b);
printf("c=%d ",c);
printf("d=%d\n",d);
return a+b+c+d;}
t1 = i + (i++);
t2 = fun(i,i++);
t3 = i+(++i);
t4 = fun(i,++i);
t5 = fun(i++,i);
t6 = fun6(i,i++,i,i);
t7 = fun6(i,i,++i,i);
请问 在i=0,j=0时(对每一个表达式均如此),
1.t1 , t2 ,t3 ,t4 在 RTCu 和RTCs 或者RTC1的两种情况下值是多少?
2.运行 t4 和 t2的时候分别输出什么,t5,t6,t7 呢?
3.好吧,难一点的问题:t8 = fun(i++,--i) +(i++)+(--j)+ fun6(++i,j++,i+j,j--)的输出和最终值是多少?
勤快的可以手动测试一下。
两条原则
1.形参执行顺序是自右向左。语句的执行也是自右向左。
2.但是计算一个表达式中的多个函数所带的形参的时候的自左向右的。
3.++i,--i永远是最先执行的。与++i处在语句中的位置或者在形参中的位置无关。
4.i++,i--在RTCu的情况下传给做形参的时候是先传递值,再 执行,并处于其他非语句的形参和语句形参传递前执行的。
在RTCs或者RTC1的设置下是全部先传递后执行的。
4.i++,i--在RTCu的情况下传给做形参的时候是先传递值,再 执行,并处于其他非语句的形参和语句形参传递前执行的。
在RTCs或者RTC1的设置下是全部先传递后执行的。
比如 RTCu 下, 对于语句 fun(i++,i++) + fun5(++i,j++,i+j)来说,S1,先传递 fun(i++, i++) 的形参 1,0. S2,此时i=2,执行 fun5(),先执行 ++i, 传递j++, 传递 此时的i,传递 i+j (这两个的顺序不知道谁先谁后),所以, S5,语句最终等于 5. 但是由于语句的执行顺序关系,所以输出是自右向左的, “fun5 a=3 b=0 c=4”\n "fun a=1 b=0\n"
浙公网安备 33010602011771号