魔数(代码大全第12章:基本数据类型)

61 篇文章 9 订阅
53 篇文章 1 订阅
        
        魔数,有时候是神秘数字(Magic Number),让你困惑激动,可能会像琼斯一样,通过III、VII、X去探险;更多时候则是魔鬼数字(Devil Number),让你痛不欲生,可能会和沃尔特一样,对23产生病态。
        本文列出,自己以前常用的魔数,及改进方式。
        1. 数组长度
        常用:最常用的是定义一个临时字符数组,如char a[8],用于存储字符串。一开始由于用完就扔,怎么方便怎么来。
        后果:后面改变功能后,会用来赋值或做其他的,如循环,sprintf,strcpy,memcpy,由于忘记考虑有效长度,很容易造成“段错误”(Segmentation fault)和其他神秘错误。
        改进:C++中字符串常规使用string,不用char;其他类型数组常用vector。特殊的数据处理中必须用char时,用宏定义或常量定义数组长度。拷贝时用snprintf,strncpy,memncpy,使用宏定义、常量定义的长度,避免重复魔数,或超出范围。
       
        2. 公式系数
        常用:有的变量,使用公式来计算,公式中使用了很多魔数。
        后果:出现问题时,不知道是公式错误,还是公式参数错误。
        改进:公式中有的系数本身就是魔数,没有合适的描述。建议可直接使用魔数,但做好详细具体注释。注释应包括:添加人,日期,公式来源,公式意义,并强调魔数不能改。作为有瑕疵,也有“熊出没”告示牌的代码存在。
       
        3. 返回值
        常用:受linux应用程序影响,自己编写或第3方的一些函数或程序的返回值,0表示正常,-X表示错误。
        后果:有-1或0的魔数,与常规应用程序返回不同,引起歧义。
        改进:一是,应用再封装一层接口,把-1、0等当成内部实现,注释清楚。二是直接使用,但每个使用的魔数,必须做好详细具体的注释,包括添加人,返回值意义,为什么如此使用,还有其他哪些值。作为例外但有特殊理由说明的代码存在(最好告知参考资料)。
       
        4. 其他
        用法:因为懒惰,完全没有理由的魔数。如文件名长度、数据缓冲区大小、等待时间、失败重启次数等等。
        后果:只知道这里有个数值,改动了会错误,为什么,不知道,只能保持。形成岩浆流(Lava Flow)代码.
        改进:使用配置项、变量、常量、枚举、宏定义等,替换。
       
        5. 其他:神秘字符,神秘字符串,神秘逻辑通道,神秘函数...
        常用:界面中的显示字符在代码中硬编码;选项的参数在代码中指定;一个if中无数的==、||、!=、<、>组成的逻辑迷宫;七、八层缩进做成的子母迷糊套等等。。。
        后果:通常都是由于匆忙和懒惰造成,种下这个瓜,会得到回报的。不是不报,时候未到。
        改进:拆分和组织是不二法门。拆分到数据库、配置文件、其他文件、其他函数中;通过过程,模式,注释,文档,把它们的关系建立起来,顺藤摸瓜,瓜熟蒂落。
       
        写代码不是写小说
        我们从小看小说:情节跌宕起伏、悬念层出不穷、角色千奇百怪、道路峰回路转、兵器匪夷所思、修炼天人合一。我们上学练写作文:修辞手法、文散形不散、除诗歌外不限、要有积极向上的中心思想、不要流水账。
        我们工作写代码、写工作日志:具体、量化、可读;不要二义性,不要惊喜,要KISS,要八股文。要如同财务般精确的流水账。
        
         参考资料
        1. 代码大全,第12章:基本数据类型。
        2. 反模式,5.4Lava Flow(岩浆流)。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值