为什么同样的代码在Apple LLVM Compiler和Microsoft VC上的结果不同?

狂奔中的毛豆 2012-10-12 01:01:38

#include<iostream>
using namespace std;
int main()
{
int i(5);
cout<<i++<<'\t'<<i++<<'\t'<<i++<<endl;

i = 5;
printf("%d %d %d", i++, i++, i++);

return 0;
}


上面的代码,在Apple LLVM Compiler上的结果是 5 6 7,但是在VC上的结果是7 6 5, 同时,我又尝试在XCode上用LLVM GCC 4.2来编译上述代码,结果和VC的相同,结果是同样是 7 6 5
我从C++ Primer上查到的结果是,<< 操作符是左结合,所以应该是 5 6 7.

那么问题就来了,到底这是谁的错!?
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

其实也不是这个代码有什么错误,无论是语法还是语义上,都是没有错误的。问题就在于语言本身的特性决定了相同的代码在不同系统上的表现为什么会出现不同的结果。C/C++这类接近系统级别的语言来说,语义定义上其实是存在缺陷的,导致程序员在解决实际问题的同时,还需要考虑系统上的问题。
[/Quote]
未定义行为 严格来说就是错误的
渣代码无误
狂奔中的毛豆 2012-10-15
  • 打赏
  • 举报
回复
其实也不是这个代码有什么错误,无论是语法还是语义上,都是没有错误的。问题就在于语言本身的特性决定了相同的代码在不同系统上的表现为什么会出现不同的结果。C/C++这类接近系统级别的语言来说,语义定义上其实是存在缺陷的,导致程序员在解决实际问题的同时,还需要考虑系统上的问题。
mujiok2003 2012-10-12
  • 打赏
  • 举报
回复
未定义的行为
mujiok2003 2012-10-12
  • 打赏
  • 举报
回复
未定义的行为
mujiok2003 2012-10-12
  • 打赏
  • 举报
回复
未定义的行为
armsword 2012-10-12
  • 打赏
  • 举报
回复
i++

请看置顶http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?61582
狂奔中的毛豆 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

代码是错的。
[/Quote]

代码是错的? 怎么说?
sniffer12345 2012-10-12
  • 打赏
  • 举报
回复
日经。。
  • 打赏
  • 举报
回复
代码是错的。

64,654

社区成员

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

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