问题提的不错,而前两位的回答都是错误的,所以值得我给你多写点。 其实是这样的 1. vc 和 tc 的输出表达式里运行的顺序都是右到左 2. vc 在遇到输出表达式里有 a++这样的语句时是这么处理的 输出 a 等输出表达式结束在执行 a=a+1; 而 tc 则是在输出表达式先按照右到左的顺序执行, 当碰到 a++的时候先做 a=a+1, 然后再继续按照右到左的顺序 执行 为了说明这个东西我给你设计了一些代码方便你理解 说明第一点的代码: tc 代码如下: #include
void main() { int b = 2; printf("%d %d %d\n", b=b+1,b=b+1,b=b+1); getch(); } 结果为: 543 vc 代码如下: #include void main() { int b = 2; printf("%d %d %d\n",b=b+1,b=b+1,b=b+1); } 结果为: 543 这样就看出结合性了 都是右到左
说明第二点的代码: tc 代码: #include void main() { int b = 2; printf("%d %d %d\n",b,b++,b); printf("%d\n",b); getch(); } 结果: 322 3
vc 代码: #include void main() { int b = 2; printf("%d %d %d\n",b,b++,b); printf("%d\n",b); } 结果: 222 3 这里看出最后在输出语句结束后都的到了 b=b+1 的结果第 2 个输出语句的结果 3 但是第一个输出语句的结果说明 但是第一个输出语句的结果说明 tc 在输出语句里就执行了 b++, vc 则没有在输出语句里执行 b++,其实他隐 ,而 , 含着在这个输出语句后还有一个 b=b+1;是你看不到的。 ;是你看不到的。 你还可以在 vc 里用 #include void main() { int b = 2; printf("%d %d %d\n",b++,b++,b++); printf("%d\n",b); } 来看看结果是不是 222 5 如果你能理解到 #include 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
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 结果 21 3 51 50 50 3 52 vc 结果 11 3 50 50 50 3 53
++x 在 vc tc 中都一样 在 printf 中就解决 先 x=x+1 在显示 x(如果有对应的现实位)
可以用 #include 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 中测试 结果都应该一样 32 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 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 6 TC 中输出结果 18 6 3 3 3