从一个微软的有意思的bug想到的

这两天发现了一个微软的非常有意思的bug。
说有意思是因为这个bug不是存在于程序中,而是存在于头文件中。

这个bug的现象是这样的:

如果在你的工程中有下面的内容:

#include<wab.h></wab.h>

那么你的工程是编译不过去的,不出意外的话编译错误是C1004,同时指示你出错的文件是wabtags.h。

花费了一些时间,最终确定问题出在微软身上。
在wabtags.h中,某些注释的*号前面,存在一个不可打印字符,其值是0xA0.
在英文平台下这不是问题,编译器简单的略过注释内的任何字符。
但在中文平台下问题就出来了。0xA0是GB2312字符集的合法leadbyte(所谓leadbyte是指两个字节一个字符(比如汉字)的

第一个字节)。
所以编译器把0xA0和后面的*看作双字节字符集的一个字符。于是整个文件就变成不符合语法规则的了。

由这个问题起,我把微软所有的头文件稍描了一下。发现包含无效字符的情况还满多的,只不过绝大多时候,这些无效字符并

不产生问题(因为他们在注释里并且没机会吞掉正常字符)。

而这些问题应该存在了5年还多。

前一阵有人给我回复说:不要说什么设计师,在微软做个程序员,要比你设计师强多了。
姑且不从对与否来看这句话,至少可以看到对微软的一种盲目崇拜。我想这种想法也具有相当的代表性。
带着这种情绪去工作会有问题的。
不要忘了微软的程序,也是人写的,所以他们也会犯错。
扩展来说,大师的话也是人说的,所以也会有错误。
说句老话,相信别人的时候,别忘了相信自己。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值