垃圾“程序是怎样炼成的”——关于《C程序设计伴侣》第A章(一)

【样本】

 

 

【评析】

  标题明显漏印了两个字——“垃圾”,应为‘垃圾程序是怎样练成的’。
  所提出的问题本身尚有一些不明确之处,有些必要的前提条件没有交待。比如关键词的最大长度。对关键词的长度有无限定,会得到截然不同的代码。
  注意,问题的要求是“按照从大到小的顺序将这些文件名输出到屏幕和结果文件”。

【样本】

 

 

【评析】

  这里的128和1024*128都是来历不明的MagicNumber。128作为文件名的长度可能尚有情可原,1024*128绝对是“天外飞仙”了。估计是作者当时一咬牙一跺脚硬憋出来的。
  这个txtfile结构的设计本身也莫名其妙。统计词频为什么要弄这么大一个数组呢?百思不得其解。后来才猜到作者的意图是把文件读到数组中之后再统计词频。这个想法实在太奇葩了,简直是奇葩中的奇葩。数一篇文章中有多少字,居然想到要先把文章背下来。幼儿园的孩子也不会想出如此弱智的办法吧?

【样本】

 

 

【评析】

  果不其然,真的把文件的内容读到数组中了。
  看来一个人愚蠢并不难,难的是能把愚蠢的想法贯彻到底。比这更难的呢?则是敢于把这种愚蠢印在书上欺骗不懂事的小朋友。然而这些都还不是最难的,最难的是敢于把这种印在书上欺骗小朋友的愚蠢说成是“实战,可以让你养成良好且符合业界标准的编程习惯和编程思想,为今后的继续前行打下必要的基础”(该书策划编辑陈冰语,P1~2)。TMD,给人家挖了一个深不见底的大坑,骗人家跳下去,还说是帮人家打“基础”。这“基础”打的也太深了吧,都特么打到海平面以下去了。
  即使抛开这个愚蠢的构思不谈,只从代码的角度考察,这个函数也是漏洞百出。
  首先

//参数合法性检查
if(NULL == file )
   return ;

   当参数不合法时,函数就跟参数合法时一样地若无其事地返回了。那这个“参数合法性检查”还有什么意义?不就是一副聋子的耳朵吗?这就像派一个人检查火灾隐患,这个发现了火灾隐患但却一声不吭知情不报一样。所以,从这个角度看,这里的“参数合法性检查”是形同虚设的装腔作势,无论如何都必然会渎职。
  同样,当fp为NULL即文件打开失败时,这个函数同样悄然无声地就像万事大吉一样地返回了。这样一来,if(NULL!=fp)就跟马戏团里的猴子敬礼一样滑稽了:虽然装得很像那么回事,但其实并没有礼貌的含义,无非是东施效颦一样装模作样摆出的一个姿态罢了。

【样本】

 

 

【评析】

  这段代码更滑稽,filecount与files本是互不相干的两个数据对象,但在
  for(int i = 0;i<filecuont;i++)
中,代码作者硬生生地乱点鸳鸯谱,把filecount说成是files的尺寸,然而files实际上有自己的尺寸,那就是sizeof files/sizeof files[0]。所以这段代码就跟硬是给四肢健全的狗装假肢一样荒唐。

posted @ 2012-12-10 23:33  garbageMan  阅读(2356)  评论(13编辑  收藏  举报