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

嗯,豆瓣网某人对我的书《0bug-C/C++商用工程之道》予以攻击,本来不想回复。
只是最近,一位在大学做教授的朋友,看了书也有一些质疑,我就挑选其中一个比较有代表性的问题做了个解释。后来想想,还是粘贴出来,请大家也都看看。
陈老师好:
 
嗯,我想了一下,为了避免您有所误解,我这里回答一个某人指出我书中的明显bug,来说明为什么不是bug,请您看看。
 
下文是豆瓣网原文摘录,网址在这里: http://www.douban.com/review/2971127/
 
Code:
  1.   P. 188 在 函式 dbg_bin_ascii(char* pPrintBuffer, char* pBuffer, int nLength) �e    
  2.       
  3.   nCount += SafePrintf(pPrintBuffer+nCount, 256, "%c", *(pBuffer + i));    
  4.       
  5.   �@�e的nCount 是目前已��入的字元�担�所以 256 ��改�� 256 - nCount,�K要防止之溢出。P.189 有 5 ��相同�e�`。    
  6.   另外,256 是一�� literal,建�h改用�量、宏或 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.   
  19.  return nCount;   
  20. }   
  21. static int dbg_bin_hex(char* pPrintBuffer,char* pBuffer,int nLength)   
  22. {   
  23.     //...   
  24. }   
  25. void dbg_bin(char* pBuffer,int nLength)   
  26. {   
  27.     //...   
  28. }   

如您所见,我每行预设打印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
肖舸

你可能感兴趣的:(职场,休闲)