| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 513 人关注过本帖
标题:VC++6.0 之 bug
只看楼主 加入收藏
青火浪子
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
 问题点数:0 回复次数:6 
VC++6.0 之 bug
#include "stdio.h"
main()
{
  int i=1;
  printf("%d,%d,%d\n",i,++i,i++);
  printf("%d",i);
}
输出结果为:
2,2,1
3
可以看出该编译系统在预算pintf()函数里面的变量
按照从右往左计算
按思维分析
可知这样的结果应为:
3,3,1
3
若使用win-tc
结果却和分析形同
即:
3,3,1
3
搜索更多相关主题的帖子: bug 
2010-01-31 10:01
邶风
Rank: 5Rank: 5
等 级:职业侠客
帖 子:287
专家分:335
注 册:2009-1-20
收藏
得分:0 
编译器不同 解释不同
没什么BUG的说法的

#include
2010-01-31 10:18
a442579302
Rank: 2
来 自:C入门
等 级:论坛游民
帖 子:29
专家分:39
注 册:2009-12-29
收藏
得分:0 
给个下载VC的地址

理想很丰满·~现实很骨感!
2010-01-31 18:46
青火浪子
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
得分:0 
回复 2楼 邶风
也是  但总和逻辑有些冲突
2010-02-02 22:19
青火浪子
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-1-31
收藏
得分:0 
回复 2楼 邶风
http://www.
页面地下的迅雷高速下载
2010-02-02 22:29
邶风
Rank: 5Rank: 5
等 级:职业侠客
帖 子:287
专家分:335
注 册:2009-1-20
收藏
得分:0 
回复 4楼 青火浪子
程序代码:
4:      int i=1;
00401028   mov         dword ptr [ebp-4],1///////////////////i值存在ptr [ebp-4] 其值为1
5:      printf("%d,%d,%d\n",i,++i,i++);
0040102F   mov         eax,dword ptr [ebp-4]
00401032   mov         dword ptr [ebp-8],eax
00401035   mov         ecx,dword ptr [ebp-8]
00401038   push        ecx  //////////////////////////////////i++最先入栈 存在ptr [ebp-8] 其值为1; i值仍然存在ptr [ebp-4] 其值为1
00401039   mov         edx,dword ptr [ebp-4]
0040103C   add         edx,1
0040103F   mov         dword ptr [ebp-4],edx
00401042   mov         eax,dword ptr [ebp-4]
00401045   push        eax//////////////////////////////////然后++i入栈 自加后 存在ptr [ebp-4] 值为2;
00401046   mov         ecx,dword ptr [ebp-4]
00401049   push        ecx///////////////////////////////////最后i入栈 值为ptr [ebp-4] 的2
0040104A   push        offset string "%d,%d,%d\n" (00422020)//i最后入栈最先被压入第一个%d 接着是++i 和 i++
0040104F   mov         edx,dword ptr [ebp-4]
00401052   add         edx,1  ////////////////////压入字符串后的最后之最后 i++露出自加本性 i=2+1
00401055   mov         dword ptr [ebp-4],edx
00401058   call        printf (004010a0)
0040105D   add         esp,10h
6:      printf("%d",i);
00401060   mov         eax,dword ptr [ebp-4]
00401063   push        eax
00401064   push        offset string "%d" (0042201c)
00401069   call        printf (004010a0)
0040106E   add         esp,8

//////////////////////////////////////////////////////////多想想 和逻辑有冲突是因为你被书上的理论定住了思维 调试一下才会发现隐藏在背后的真相

[ 本帖最后由 邶风 于 2010-2-3 00:38 编辑 ]

#include
2010-02-03 00:37
fionawings
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2010-2-3
收藏
得分:0 
不是bug,赞同楼上的说法,楼主钻了牛角尖了,其实运算并不从右向左一次进行的
2010-02-03 13:16
快速回复:VC++6.0 之 bug
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037341 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved