谨防define宏陷阱
来源:互联网 发布:淘宝代销如何发货 编辑:程序博客网 时间:2024/06/13 14:46
最近在研究Deduplication(重复数据删除)存储技术,实现一个dedup原型系统,结果在Coding中遇到了一个莫名其妙的问题。简略代码如下:
我用大小为1.9MB的文件作为源文件,结果 block_num 居然为 61881344,真是出乎想像。块大小BLOCK_LEN = 32KB,所以block_num应该为59才对。问题出在哪了呢?这段代码非常简单了,没有什么复杂的逻辑,我反复review了几次也没有发现问题。于是,在家里转了两圈,然后无意中注意到了BLOCK_LEN的宏定义。define总是容易犯些低级的错误,难道我也犯了最低级的错误不成?
#define BLOCK_LEN 32 * 1024 /* 32K Bytes */
看到这行,我当时就傻了,自己还真犯了最低级、最原始的错误。
block_num = stat_buf.st_size / BLOCK_LEN;
上面这行宏替换后就成了:
block_num = stat_buf.st_size / 32 * 1024;
终于明白问题出在何处了,给宏加上(),即#define BLOCK_LEN (32 * 1024) ,一切OK了!
这次经验教训深刻,估计我以后很少会再犯类似错误了,另外也小有收获和乐趣 ^-^。
最后提醒一下:宏使用很方便,但要谨慎使用,尤其需要注意书写格式,尽量多用括号避免歧义。细节是魔鬼!
- 谨防define宏陷阱
- 求职者谨防四大陷阱
- #define宏定义的陷阱
- 谨防Java网络编程“陷阱”
- 谨防Java网络编程“陷阱”
- 关于宏#define使用陷阱总结
- 买房黑幕大爆光,见招拆招,谨防陷阱
- #define陷阱题
- 建议4:小心宏#define使用中的陷阱
- Kappa女遭恶意利用 专家提醒网友谨防陷阱
- 大学生求职心切谨防陷阱 试用期不是白用期
- 公用免费WiFi受热捧 用户谨防落入钓鱼陷阱
- 钓鱼网站数量激增 上网购物谨防钓鱼陷阱
- 12306开售春运火车票 手机管家:谨防四大陷阱
- C语言中define的陷阱
- C陷阱篇之define的缺陷
- typedef 和 define的区别 和 陷阱
- 改善C++ 程序的150个建议学习之建议4:小心宏#define使用中的陷阱
- 如何设置和取得数据窗口中的单元格的值
- PB对于ORACLE中字段的注释处理
- jQuery:收集一些基于jQuery框架开发的控件/jquery插件
- VS2008 和.NET Framework3.5新功能及相关技术
- ORACLE常用功能集锦
- 谨防define宏陷阱
- [转]jQuery-1.3.2学习笔记
- 基于S3C2410的Windows CE 5.0 BSP移植
- 如何在PB中取得硬件识别码
- ASP.NET 常用的33种代码(转,收藏一下,以备后查)
- 如何在PB中取得全球识别码
- Linux全套完整视频教程
- ASP.NET页面之间传参
- php配置文件解析