C++一简单的程序的疑问,WIN和Linux下得出不同的结果.怪哉

潇湘游子 2018-05-09 08:14:11
看程序:
#include <stdio.h>
int main()
{
int i = 1, j = 1;
j = i++ * ++j * ++i * j++;
printf("i = %d,j = %d\n", i, j);
return 0;
}


而分别在win和linux下得到两个不同的答案.
Windows 10 VS2017 的结果,

Windows 10 BASH Linux 子系统,

其实我还在Ubuntu ,和MAC Xcode中都测试了是和Linux 中的结果一样的,
请问大神们,这个具体运算的过程是怎么样的?
...全文
597 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2018-05-09
  • 打赏
  • 举报
回复
未定义行为取决于编译器实现 https://blog.csdn.net/fefe82/article/details/37833767
  • 打赏
  • 举报
回复
c这种用法,比较容易混淆。
zhanw15 2018-05-09
  • 打赏
  • 举报
回复
VS用的c编译器使cl.exe,Linux系列用的是GCC编译器,编译器不一样,编译出来也不一样。 vcc的环境下,*的结合方向是从左到右,++a的优先级高于a++和*,a++和*的优先级相同,赋值运算符的优先级最低; 那么,先执行++i和++j,i的值变为2,j的值变为2,然后从左向右执行,i++表达式值为仍为2,整体结果为16,最后进行++操作,变为17后进行赋值。 gcc下,a++优先级和++a优先级相同,都高于*优先级。先进行i++,表达式值为1,i值为2;再进行++j,j值为2,在进行i++,i值为3,再进行j++,表达式值为2,然后进行*运算,得到12.
zhanw15 2018-05-09
  • 打赏
  • 举报
回复
优先级可以看一下我的这篇文章,https://blog.csdn.net/zhanw15/article/details/79912833 我用的minGW,在windows下,结果是3和9,猜想minGW的优先级应该是a++大于++a大于*,如果写程序的时候不确定最好加上(); 另外,返回值如果需要自增运算要用return ++i,比如我上次就经历了这个错误。。。
qq_40162781 2018-05-09
  • 打赏
  • 举报
回复
就算在win的环境,不同编译器下结果都可能不同,

64,682

社区成员

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

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