vc下的编译器和gcc编译器在编译时的一点小区别_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > vc下的编译器和gcc编译器在编译时的一点小区别

vc下的编译器和gcc编译器在编译时的一点小区别

 2010/9/19 23:30:39  googya  http://googya.javaeye.com  我要评论(0)
  • 摘要:今天一位童靴给我了如下的代码:#include<stdio.h>main(){intb=3;intarr[]={6,7,8,9,10};int*ptr=arr;*(ptr++)+=128;printf("%d,%d\n",*ptr,*(ptr++));}问我输出的结果是什么以及原因。我告诉他是8,7.他觉得很吃惊,因为他在vc++下编译的,执行的结果是7,7,我试了一下,在vc下果然是7,7,我猜想大概是程序printf函数中的参数执行的顺序的问题,在gcc中是从右往左
  • 标签:vc下 编译器 gcc编译器 编译 一点小区别
    今天一位童靴给我了如下的代码:
#include<stdio.h>
main()
{
	int b=3;
	int arr[]={6,7,8,9,10};
	int *ptr=arr;
	*(ptr++)+=128;
	printf("%d,%d\n",*ptr,*(ptr++));
}


问我输出的结果是什么以及原因。我告诉他是8,7.他觉得很吃惊,因为他在vc++下编译的,执行的结果是 7,7,我试了一下,在vc下果然是7,7,我猜想大概是程序printf函数中的参数执行的顺序的问题,在gcc中是从右往左,vc++里面出现这样的结果,其顺序应该是从左往右。原以为事情到此应很清楚了,就是执行的顺序问题。

    可是麻烦问题又来了。假设在vc++里面的顺序是从左至右,那么下面代码的结果应该是7,8

#include<stdio.h>
main()
{
int b=3;
int arr[]={6,7,8,9,10};
int *ptr=arr;
*(ptr++)+=128;
printf("%d,%d\n",*ptr,*(++ptr));

}

可是,在vc下执行的结果是 8,8.这点就让人比较费解了啊,按照从左至右的顺序,结果应该是7,8。
    那么这可能是编译器的不同所导致的问题。只是个人觉得vc++处理得似乎不够一致。
    也没有多大的意义,只是备忘,免得以后自己也陷进去了。
    也可能是微软超越了执行顺序的问题,只是我还不理解它所采用方法的机制罢了

发表评论
用户名: 匿名