i++的一个小例子,为什么VC++与TC的运行结果不一样?

wonder168 2006-10-18 10:37:57
main()
{
int i,k;
i=1;
k=(i++)+(i++)+(i++);
printf("i=%d , k=%d\n",i,k);
i=1;
k=(++i)+(++i)+(++i);
printf("k=%d\n",i,k);
}

VC++中K=10,TC中K=12。

TC中可以解释如下:i先进行三次自加后为4,这时再算K=i+i+i,结果为12。

关键是VC++中K=10如何解释?
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2006-10-18
  • 打赏
  • 举报
回复
哎,楼主,跟你讲了,C、C++都认为这是未定义行为。C++而且就是为了兼容C还被迫继承了这个规定的。如果i是自定义类,结果就将是明确定义行为了。
wonder168 2006-10-18
  • 打赏
  • 举报
回复
k=(++i)+(++i)+(++i);
首先第一个++i 时,得到2,之后又发现++i,后面几个一直加到4\
这样2+4+4=10
_______________________
有点勉强吧,第一个加1不动,后两个加到4?
其实C语言中的最好理解,i的在内存中占的单元不变,先自加再进行加法运算。
逍遥的心 2006-10-18
  • 打赏
  • 举报
回复
k=(++i)+(++i)+(++i);
首先第一个++i 时,得到2,之后又发现++i,后面几个一直加到4\
这样2+4+4=10
wonder168 2006-10-18
  • 打赏
  • 举报
回复
简化的程序是:
main()
{
int i,k;
i=1;
k=(++i)+(++i)+(++i);
printf(" k=%d\n",k);
}

VC++中K=10,TC中K=12。
TC中可以解释如下:i先进行三次自加后为4,这时再算K=i+i+i,结果为12。
关键是VC++中K=10如何解释?
taodm 2006-10-18
  • 打赏
  • 举报
回复
这个明确载在C++标准上的,是“未定义行为”!
得到任何结果都是符合标准的、正确的。
你只能避免写出这样的代码!
lw1a2 2006-10-18
  • 打赏
  • 举报
回复
日日见
低调的小青蛙 2006-10-18
  • 打赏
  • 举报
回复
深究这个问题没有意义,应该避免写出这样的代码。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧