其实是这样的
1. vc和tc的输出表达式里运行的顺序都是右到左
2. vc在遇到输出表达式里有a++这样的语句时是这么处理的
输出a
等输出表达式结束在执行a=a+1;
而tc则是在输出表达式先按照右到左的顺序执行,当碰到a++的时候先做a=a+1,然后再继续按照右到左的顺序执行
为了说明这个东西我给你设计了一些代码方便你理解
说明第一点的代码:
tc代码如下:
#include <stdio.h>
void main()
{
int b = 2;
printf("%d%d %d\n", b=b+1,b=b+1,b=b+1);
getch();
}
结果为:
5 4 3
vc代码如下:
#include <stdio.h>
void main()
{
int b = 2;
printf("%d %d%d\n",b=b+1,b=b+1,b=b+1);
}
结果为:
5 4 3
这样就看出结合性了都是右到左
说明第二点的代码:
tc代码:
#include <stdio.h>
void main()
{
int b = 2;
printf("%d%d %d\n",b,b++,b);
printf("%d\n",b);
getch();
}
结果:
3 2 2
3
vc代码:
#include <stdio.h>
void main()
{
int b = 2;
printf("%d %d%d\n",b,b++,b);
printf("%d\n",b);
}
结果:
2 2 2
3
这里看出最后在输出语句结束后都的到了b=b+1的结果第2个输出语句的结果3
但是第一个输出语句的结果说明tc在输出语句里就执行了b++,而vc则没有在输出语句里执行b++,其实他隐含着在这个输出语句后还有一个b=b+1;是你看不到的。
你还可以在vc里用
#include <stdio.h>
void main()
{
int b = 2;
printf("%d %d%d\n",b++,b++,b++);
printf("%d\n",b);
}
来看看结果是不是
2 2 2
5
如果你能理解到
#include <stdio.h>
void main()
{
int b = 2;
printf("%d %d %d\n",b,b,b);
b++;
b++;
b++;
printf("%d\n",b);
}
这样的代码时,就说明你已经明白了。
到这 你完全可以自己解释你提出的问题了
这里提醒一下,tc vc在输出语句里碰到++a这样的语句时,都是在输出语句里直接解决的。
tc vc printf的执行顺序都是右到左
说明这个问题的设计如下:
#include <stdio.h>
void main()
{
int b = 1;
printf("%d %d\n",b++,b++);
printf("%d\n",b);
printf("%d %d %d%d\n",b++,b++,b=50,b++);
printf("%d\n",b);
}
tc结果
2 1
3
51 50 50 3
52
vc结果
1 1
3
50 50 50 3
53
++x 在vc tc 中都一样 在printf中就解决 先x=x+1 在显示x(如果有对应的现实位)
可以用
#include <stdio.h>
void main()
{
int b = 1;
printf("%d%d\n",++b,++b);
printf("%d\n",b);
printf("%d %d %d%d\n",++b,++b,b=50,++b);
printf("%d\n",b);
}
在tc vc中测试 结果都应该一样
3 2
3
52 51 50 4
52
在提示一下 因为库函数原型我们看不到 所以遇到这样的问题 只有通过上面这样的逻辑推理来推想库函数的执行过程 tc vc 编译器的稍微不同就得到不同结果,提示大家 写程序一定要规范 这样的语法结构型不应该出现在开发代码中,如果你是程序员,你会非常危险的弄不好,就为了这段代码你的工作就没了......现在在搞开发的朋友一定深有体会...
在学习中能够想到这么去比较编译器,还是不错的值得鼓励.但不要把时间都浪费在这上,祝愿大家进步!
碰到问题要用代码去说明 不要凭空想象,这样做很危险!
这里我做的解释,是一个合理的推论,实际的源码我们看不到,所以可能跟真实的代码思路还是有些出入,希望大家来指正,但要带代码来说服我!!
int x=3,y;
y=(x++)+(x++)+(++x)+5;
printf("%d%d\n",y,x);
printf("%d\n",x);
VC中结果
15 3
6
TC中结果/
17 3
6
TC中 1、将所有先++、--的先抽出来计算;
2、将第一步计算的结果带入表达式中,计算表达式的值;
3、再将所有后自增自减预算抽出来进行计算;
Int x=3,y;
printf("%d%d\n",(x++)+(x++)+(++x)+5,x);
printf("%d\n",x);
VC中输出结果;
15 3
6
TC 中输出结果
18 3
6