关于0bug中一处读者质疑的回复
嗯,我想了一下,为了避免您有所误解,我这里回答一个某人指出我书中的明显bug,来说明为什么不是bug,请您看看。
下文是豆瓣网原文摘录,网址在这里:http://www.douban.com/review/2971127/
- P. 188 在 函式 dbg_bin_ascii(char* pPrintBuffer, char* pBuffer, int nLength) 裡
- nCount += SafePrintf(pPrintBuffer+nCount, 256, "%c", *(pBuffer + i));
- 這裡的nCount 是目前已寫入的字元數,所以 256 應改為 256 - nCount,並要防止之溢出。P.189 有 5 個相同錯誤。
- 另外,256 是一個 literal,建議改用變量、宏或 const。
不过,我这个原作者说,这不是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这个函数调用。
- static int dbg_bin_ascii(char* pPrintBuffer,char* pBuffer,int nLength)
- {
- int i;
- int nCount=0;
- for(i=0;i<nLength;i++)
- {
- if(32<=*(pBuffer+i))
- {
- //可显示
- nCount+=SafePrintf(pPrintBuffer+nCount,256,"%c",*(pBuffer+i));
- }
- else
- {
- //不可显示
- nCount+=SafePrintf(pPrintBuffer+nCount,256,".");
- }
- }
- return nCount;
- }
- static int dbg_bin_hex(char* pPrintBuffer,char* pBuffer,int nLength)
- {
- //...
- }
- void dbg_bin(char* pBuffer,int nLength)
- {
- //...
- }
如您所见,我每行预设打印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中一处读者质疑的回复相关推荐
- 中首清算质疑偶像演员不适合演抗战剧?《雷霆战将》三大还原引争议
<雷霆战将>三大"还原"引争议 由张云龙.高伟光.赖雨濛.魏千翔等主演的热血青春战争剧<雷霆战将>正在湖南卫视热播.该剧在中首清算宣传时有"以李云 ...
- 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现?
题目:涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入描述: 输入的第一行包 ...
- outlook中,如何将同一回复主题的邮件放在一起
目标: outlook中,如何将同一回复主题的邮件放在一起 使用outlook,应该可以将回复的信与原信件放在一起显示,这样就可以节省空间,看起来也方便跟聊天记录一样. 方法:View -> S ...
- java删除word中批注_Java 添加、回复、删除Word批注
class="MsoNormal">在word中,批注是一种常用于对特定文档内容进行注解的方法,起到解释说明.标记指正的作用.本篇文章中,将通过Java程序来演示如何来操作批 ...
- 【转载】几封读者来信的回复
作者博客地址 趁着中秋期间,终于能抽一些闲暇的时间(感谢我的太太),集中整理了一下邮件.有朋友邮件问到自己正在从事.或即将进入数据科学领域时,碰到的困惑.再回想,这几年也经常面试候选人,每当我以抱歉结 ...
- 在视图列中显示文档所有读者和作者
大家好,才是真的好.马上就能下载Notes和Domino V11,不知道有多少人激动着.这几天,我们先来热个身,想起很久没写技术,所以写一个. Notes Domino产品中其实隐藏了无数的彩蛋,不知 ...
- 操作系统中读者——写者问题的分析
操作系统中读者--写者问题的分析 Analysis of readerwriter problem in operating system 摘要:本篇文章就操作系统中读者--写者问题进行利用记录型信号 ...
- 如何回复SCI审稿人评审意见(response letter)
如何高效地回复审稿意见?(上) 如何高效地回复审稿意见?(中) 如何高效地回复审稿意见?(下) 如何高效回复审稿人意见(附实例) 如何高效的回复审稿人意见? 如何正确回复审稿意见(附模板) 如何有效回 ...
- 谈谈LOADRUNNER中PACING的设置
原作者:xingcyx http://www.blogjava.net/xingcyx/archive/2006/12/28/90498.html 在 LoadRunner 的运行场景中, ...
最新文章
- 命令行下运行 java someClass.class出现 “错误:找不到或无法加载主类someClass ” 的解决方案
- kafka单节点部署无法访问问题解决
- 在物理机上用u盘安装linux遇到的问题
- 社会保险省内转移需要什么手续或过程?
- ASP.NET跨页传值方法汇总
- fopen吃内存吗 php,file_get_contents = PHP致命错误:允许的内存耗尽
- mate40系统鸿蒙,Mate40领衔更新!鸿蒙系统首批升级机型名单:这些机型可坐等推送...
- OGRE针对图形API调用的效率优化
- 判断zk是否挂掉_Zookeeper入门学习第一天,zk集群简单介绍
- 你学会测试了吗(1):推荐工具
- Day11名称空间,作用域,闭包函数
- Ubuntu开机慢_开机计时1分30秒_A start job is running for dev-disk-by...
- 计算机/程序员常用英语(持续添加,包括一些简写)
- 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
- 硬盘数据恢复:自己在家修复你的硬盘只需要5分钟就够了
- 诺基亚智能手机内存不足等问题的解决
- Exchange 2007 被攻击
- 联想小新310电脑Fn功能键切换
- 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告...