嗯,豆瓣网某人对我的书《0bug-C/C++商用工程之道》予以***,本来不想回复。
只是最近,一位在大学做教授的朋友,看了书也有一些质疑,我就挑选其中一个比较有代表性的问题做了个解释。后来想想,还是粘贴出来,请大家也都看看。
陈老师好:
 
嗯,我想了一下,为了避免您有所误解,我这里回答一个某人指出我书中的明显bug,来说明为什么不是bug,请您看看。
 
下文是豆瓣网原文摘录,网址在这里:http://www.douban.com/review/2971127/
 
Code:
  1.   P. 188 在 函式 dbg_bin_ascii(char* pPrintBuffer, char* pBuffer, int nLength) 裡
  2.   
  3.   nCount += SafePrintf(pPrintBuffer+nCount, 256, "%c", *(pBuffer + i));
  4.   
  5.   這裡的nCount 是目前已寫入的字元數,所以 256 應改為 256 - nCount,並要防止之溢出。P.189 有 5 個相同錯誤。
  6.   另外,256 是一個 literal,建議改用變量、宏或 const。
应该说,从程序设计的角度,他说的对,这里面的256不做减法,就是bug,因为可能崩掉。这个可以说是他为本书挑刺,找到的一处算是“铁证”的证明了。
 
不过,我这个原作者说,这不是bug,是优化。原因很简单,他在断章取义。
 
这段代码我的原意是以二进制格式打印一段数据,每行打印成如下格式:
 //打印一行,16Byte
//0000 - 00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 xxxxxxxxxxxxxxxx
 
函数原型如下,其中,dbg_bin_ascii是打印后面的ASCII表示的数据内容的函数(即红字部分)。请注意,这是静态函数,即仅本模块调用。即仅有dbg_bin这个函数调用。
 
Code:
  1. static int dbg_bin_ascii(char* pPrintBuffer,char* pBuffer,int nLength)
  2. {
  3. int i;
  4. int nCount=0;
  5. for(i=0;i<nLength;i++)
  6. {
  7. if(32<=*(pBuffer+i))
  8. {
  9. //可显示
  10. nCount+=SafePrintf(pPrintBuffer+nCount,256,"%c",*(pBuffer+i));
  11. }
  12. else
  13. {
  14. //不可显示
  15. nCount+=SafePrintf(pPrintBuffer+nCount,256,".");
  16. }
  17. }
  18. return nCount;
  19. }
  20. static int dbg_bin_hex(char* pPrintBuffer,char* pBuffer,int nLength)
  21. {
  22. //...
  23. }
  24. void dbg_bin(char* pBuffer,int nLength)
  25. {
  26. //...
  27. }

如您所见,我每行预设打印16Bytes,即dbg_bin_ascii一行,从业务上就界定最多打印16个字符,而如您所见,我预设256的buffer,这是一种常见的手法,即业务界定了最大使用需求后,以一个大于需求的缓冲区来实现功能,则可以规避很多错误处理的逻辑,因为反正不会出错,程序会变得很简单。
 
这个时候,我在程序中,256将不再执行减法计算,这算是一种优化了,因为循环中减少不必要的计算,是加快程序运行的设计。至少,不是bug。
 
但是,由于这个老兄的恶意断章取义,或者说温柔点,他能力不够,看不懂,没有把全部的书中信息都粘贴出来,没有看过书的网友看了,自然会以为是书中bug,这种批评,我确实无法接受。
 
至于256没有用宏,是我的习惯,因为这里我做了优化,我也怕我自己Code Review的时候,一时脑子糊涂,看成bug,因此我故意不用宏,就是一个常数,提醒自己注意,这个点有特殊设计,别看错了。
 
 
=======================================================
在线底价购买《0bug-C/C++商用工程之道》
(直接点击下面链接或拷贝到浏览器地址栏)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0
肖舸

转载于:https://blog.51cto.com/tonyxiaohome/278529

关于0bug中一处读者质疑的回复相关推荐

  1. 中首清算质疑偶像演员不适合演抗战剧?《雷霆战将》三大还原引争议

    <雷霆战将>三大"还原"引争议 由张云龙.高伟光.赖雨濛.魏千翔等主演的热血青春战争剧<雷霆战将>正在湖南卫视热播.该剧在中首清算宣传时有"以李云 ...

  2. 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现?

    题目:涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入描述: 输入的第一行包 ...

  3. outlook中,如何将同一回复主题的邮件放在一起

    目标: outlook中,如何将同一回复主题的邮件放在一起 使用outlook,应该可以将回复的信与原信件放在一起显示,这样就可以节省空间,看起来也方便跟聊天记录一样. 方法:View -> S ...

  4. java删除word中批注_Java 添加、回复、删除Word批注

    class="MsoNormal">在word中,批注是一种常用于对特定文档内容进行注解的方法,起到解释说明.标记指正的作用.本篇文章中,将通过Java程序来演示如何来操作批 ...

  5. 【转载】几封读者来信的回复

    作者博客地址 趁着中秋期间,终于能抽一些闲暇的时间(感谢我的太太),集中整理了一下邮件.有朋友邮件问到自己正在从事.或即将进入数据科学领域时,碰到的困惑.再回想,这几年也经常面试候选人,每当我以抱歉结 ...

  6. 在视图列中显示文档所有读者和作者

    大家好,才是真的好.马上就能下载Notes和Domino V11,不知道有多少人激动着.这几天,我们先来热个身,想起很久没写技术,所以写一个. Notes Domino产品中其实隐藏了无数的彩蛋,不知 ...

  7. 操作系统中读者——写者问题的分析

    操作系统中读者--写者问题的分析 Analysis of readerwriter problem in operating system 摘要:本篇文章就操作系统中读者--写者问题进行利用记录型信号 ...

  8. 如何回复SCI审稿人评审意见(response letter)

    如何高效地回复审稿意见?(上) 如何高效地回复审稿意见?(中) 如何高效地回复审稿意见?(下) 如何高效回复审稿人意见(附实例) 如何高效的回复审稿人意见? 如何正确回复审稿意见(附模板) 如何有效回 ...

  9. 谈谈LOADRUNNER中PACING的设置

    原作者:xingcyx       http://www.blogjava.net/xingcyx/archive/2006/12/28/90498.html 在 LoadRunner 的运行场景中, ...

最新文章

  1. 命令行下运行 java someClass.class出现 “错误:找不到或无法加载主类someClass ” 的解决方案
  2. kafka单节点部署无法访问问题解决
  3. 在物理机上用u盘安装linux遇到的问题
  4. 社会保险省内转移需要什么手续或过程?
  5. ASP.NET跨页传值方法汇总
  6. fopen吃内存吗 php,file_get_contents = PHP致命错误:允许的内存耗尽
  7. mate40系统鸿蒙,Mate40领衔更新!鸿蒙系统首批升级机型名单:这些机型可坐等推送...
  8. OGRE针对图形API调用的效率优化
  9. 判断zk是否挂掉_Zookeeper入门学习第一天,zk集群简单介绍
  10. 你学会测试了吗(1):推荐工具
  11. Day11名称空间,作用域,闭包函数
  12. Ubuntu开机慢_开机计时1分30秒_A start job is running for dev-disk-by...
  13. 计算机/程序员常用英语(持续添加,包括一些简写)
  14. 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
  15. 硬盘数据恢复:自己在家修复你的硬盘只需要5分钟就够了
  16. 诺基亚智能手机内存不足等问题的解决
  17. Exchange 2007 被攻击
  18. 联想小新310电脑Fn功能键切换
  19. 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息
  20. 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告...

热门文章

  1. 史上最强音视频下载神器youtube-dl回归,GitHub75k星
  2. 足球?光头?AI:这道题可太难了
  3. 在网易有道做语音算法工程师是一种怎样的体验?
  4. 关于数字化转型,IDC发布了他们的新观点
  5. Java动态追踪技术探究
  6. pandas 索引与列相互转化
  7. linux中sh基本语法
  8. Unity 3D:在现有的Android游戏场景中显示AdMob的横幅
  9. MegaCli查看RAID
  10. [物理学与PDEs]第2章习题参考解答