免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: er
打印 上一主题 下一主题

bool 陷井 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-08-04 15:15 |只看该作者
这个bug,我刚才又复现了
看看函数调用后并没有and eax, 0FFh

hello.JPG (3.04 KB, 下载次数: 29)

hello.JPG

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
12 [报告]
发表于 2006-08-04 15:22 |只看该作者
应该是思一克所说的情况, 没有f()函数的声明
你应该把详细的情况贴出来, 如果是两个文件的内容, 就不要放到一起, 以免误导别人

论坛徽章:
0
13 [报告]
发表于 2006-08-04 15:39 |只看该作者
楼主给出一个完整的重复。

这种问题,基本上都是一些小错误造成的。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
14 [报告]
发表于 2006-08-04 16:14 |只看该作者
原帖由 er 于 2006-8-4 10:06 发表

我是在真实的项目中遇到的,这段代码如果拿gcc编译时,判断时用的test %al, %al,拿vc6编译是用的两行代码,
and         eax,0FFh
test        eax,eax
这样也没问题.但实际项目中(VC6编译),却没有and eax,0FFh这句,但是此时eax中的值却是0xCCCCCC00,因此会出错,不过当我用
if (f() == true)时,and eax,0FFh这句又会出现.我想我没必要骗大家,所以我觉得还是typedef enum{false, true} bool;这样定义比较好,而不是为了省空间而用typedef unsigned char bool


我认为没有对f()的返回指判断时,因为返回值没有被使用,and eax,0FFh被优化掉了

论坛徽章:
0
15 [报告]
发表于 2006-08-04 16:40 |只看该作者

回复 1楼 er 的帖子

大侠用的什么编译器啊?

这编译器也太垃圾了吧!简直不能算是编译器!!!

论坛徽章:
0
16 [报告]
发表于 2006-08-04 16:41 |只看该作者
原帖由 chzht001 于 2006-8-4 16:40 发表
大侠用的什么编译器啊?

这编译器也太垃圾了吧!简直不能算是编译器!!!

一般情况下,99.99%都是人出错,而不是编译器的错。

论坛徽章:
0
17 [报告]
发表于 2006-08-05 09:24 |只看该作者
应该是在使用f()之前没有事先声明,这样标准C认为f()返回int,所以就直接test eax了

论坛徽章:
0
18 [报告]
发表于 2006-08-05 12:17 |只看该作者
原帖由 yuxh 于 2006-8-4 15:22 发表
应该是思一克所说的情况, 没有f()函数的声明
你应该把详细的情况贴出来, 如果是两个文件的内容, 就不要放到一起, 以免误导别人


刚才又切换到以前的代码,发现是这个原因,函数和声明都在同一文件中,调用是在另一文件中,把声明也加到调用函数中就正常了.

知道了这个原因,但是感觉这还是个隐患,因为这个项目会拿几个编译器来编译,像这种函数调用前未声明原型的警告会有成百上千,没人去注意的.
当然大家可能会觉得这是人为的问题,但是我会尽量避开这个问题,尽量不使用那个unsigned char定义的bool了

论坛徽章:
0
19 [报告]
发表于 2006-08-05 13:00 |只看该作者
你们做项目调用函数之前不声明?
我的GOD……

论坛徽章:
0
20 [报告]
发表于 2006-08-05 21:50 |只看该作者
这是基本功问题啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP