Turboc 和VC6.0 编译结果不一样
程序1:#include"stdio.h"voidmain(){inti;i=0;printf("%d\n",++i);printf("%d\n",i++);printf...
程序1:
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d\n",++i);
printf("%d\n",i++);
printf("%d\n",i);
}
程序2:
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d,%d\n",++i,i++);
printf("%d\n",i);
}
这两个程序分别用Turboc 和VC6.0 编译
程序1的结果是一样的
程序2的结果不一样
这是为什么 展开
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d\n",++i);
printf("%d\n",i++);
printf("%d\n",i);
}
程序2:
#include "stdio.h"
void main()
{
int i;
i=0;
printf("%d,%d\n",++i,i++);
printf("%d\n",i);
}
这两个程序分别用Turboc 和VC6.0 编译
程序1的结果是一样的
程序2的结果不一样
这是为什么 展开
4个回答
展开全部
非常抱歉我不能给你完美的解答。如果非要问,这个现象只是由编译器决定的。不同的编译器,可能出来不同的结果。
依目前来看,差别应该主要出现在 printf("%d,%d\n",++i,i++);
到底是先算++i 还是先算i++,或者是到底是得到自加的值以后,再进行计算输出。
我只能告诉你几点
1.能发现这些差别,是值得肯定的
2.试图研究这些差别,是没有必要的,因为编译器也是别人写的程序,那么程序必定有他的设计思想,那就要允许不同的编译器设计思想不同,所以同一个问题出现不同的结果
3.尽量少用printf,初级阶段调试可以用,后面你会发现,这个函数没啥好处
依目前来看,差别应该主要出现在 printf("%d,%d\n",++i,i++);
到底是先算++i 还是先算i++,或者是到底是得到自加的值以后,再进行计算输出。
我只能告诉你几点
1.能发现这些差别,是值得肯定的
2.试图研究这些差别,是没有必要的,因为编译器也是别人写的程序,那么程序必定有他的设计思想,那就要允许不同的编译器设计思想不同,所以同一个问题出现不同的结果
3.尽量少用printf,初级阶段调试可以用,后面你会发现,这个函数没啥好处
展开全部
程序编译顺序不一样,TC中是标准顺序,VC中顺序不标准
VC中同级别的数据处理是从右向左处理的,而标准是从左向又的
比如说a=b+c+d+e;在VC中就是先算d+e,然后c+(d+e),然后再b+(c+(d+e))
标准应该从左向右依次计算
VC中同级别的数据处理是从右向左处理的,而标准是从左向又的
比如说a=b+c+d+e;在VC中就是先算d+e,然后c+(d+e),然后再b+(c+(d+e))
标准应该从左向右依次计算
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,不同的编译器在处理和实现 i++,++i多个连在一起的时候都是不一样的。
我们只要弄懂++i与i++的区别,以及常见的运算符号的优先级就可以了
不要太去抠这些东西,否则很难受的。
例如:负数与负数的求余,负数有小数的和负数有小数的求余。C,VB,JAVA,C#,Javascript,Go等多种语言都是不大同一的。
我们只要弄懂++i与i++的区别,以及常见的运算符号的优先级就可以了
不要太去抠这些东西,否则很难受的。
例如:负数与负数的求余,负数有小数的和负数有小数的求余。C,VB,JAVA,C#,Javascript,Go等多种语言都是不大同一的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是因为两者的调用约定不一样。C语言是cdecall,VC是stacall,两者的参数压栈方式不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询