魔数(magic number),即在编写程序时直接在程序中运用数字,而不是采用定义宏或是const变量的方式,图1是使用了魔数的一个示例程序。其中的64是指Msk的最大字节数。从这一程序中可以看出,Msk的最小字节数是MIN_MSK_LEN,即20。采用魔数的危害有:
   1) 降低了程序的可读性。有人可能会提出,那加一些注释不就完了吗?如果真是采用加注释的方式,那为什么不将其定义成一个宏或是const常量呢?要知道查看注释的效率肯定没有直接看代码来得快和方便,也不存在不同步的问题(代码与注释有可能不同步)。
   2) 如果下一次这个最大值要从64改为128,那得在adjustMask()中对每一处都进行更改。另外,当一个项目较大时,魔数的存在会使得程序维护非常、非常困难。
由此看来,这里的“魔”不应理解成象“魔法(magic)”那样神奇,而应理解为象“魔鬼(monster)”那样可怕。

example.c
00290: #define MIN_MSK_LEN 20
00291:
00292: int adjustMsk (MskContext* Context)
00293: {
00294:     char temp [64] = {0};
00295:
00296:     if (Context->lenMsk > 64) {
00297:         memcpy (temp, Context->msk + (Context->lenMsk - 64),    64);
00298:         ...
00399:         memcpy (Context->msk, temp, 64);
00300:     }
00301:     else if (Context->lenMsk < MIN_MSK_LEN) {
00302:         return ERROR;
00303:     }
00304:     ...
00305: }
图1

图2是采用宏之后的版本。其中定义了MAX_MSK_LEN的大小为64,如果其它函数中也需要用到Msk的最大值,那么也可以引用这一宏。如果下一次想将最大值从64改为128时,只要改MAX_MSK_LEN宏的定义就行了。另外,这种宏定义的存在有利于模块与模块之间共享,从而在一定程度上提高重用性。

example.c
00289: #define MIN_MSK_LEN 20
00290: #define MAX_MSK_LEN 64
00291:
00292: int adjustMsk (MskContext* Context)
00293: {
00294:     char temp [MAX_MSK_LEN] = {0};
00295:
00296:     if (Context->lenMsk > MAX_MSK_LEN) {
00297:         memcpy (temp, Context->msk + (Context->lenMsk - MAX_MSK_LEN),
00298:             MAX_MSK_LEN);
00399:         ...
00300:         memcpy (Context->msk, temp, MAX_MSK_LEN);
00301:     }
00302:     else if (Context->lenMsk < MIN_MSK_LEN) {
00303:         return ERROR;
00304:     }
00305:     ...
00306: }
图2

转载于:https://blog.51cto.com/yunli/265730

【编程好习惯】避免使用魔数相关推荐

  1. 聊聊编程中的 “魔数”

    大家好,我是鱼皮,无意间在网上看到了这么一张图: 刚看到这段代码时,我是比较吃惊的,作者竟然使用了一个英文单词 deadbeef 来定义宏常量! 我本来以为只是一位幽默的程序员的小玩笑,但后来查阅资料 ...

  2. python magic number_编程中的「魔数」(magic number)是什么意思?平时我们能接触到哪些魔数?...

    "魔数"有贬义词.中性词.褒义词三种用法,默认为贬义词. 1.贬义词"魔数" 指的是代码中出现的没有说明的数字.代码中突然出现一个没说明用途的数字会让其它阅读代 ...

  3. 小知识 | Java中的“魔数”

    转载自 小知识 | Java中的"魔数" 在编程过程中,我们可能经常听到"魔数"这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢? 一.标识文件类型的&qu ...

  4. 魔数(magic number)

    魔数是编程中我们需要尽量避免使用的,但是很多人不去管也不清楚. 百度百科中解释如下:         很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此).根据这几个字节的内容 ...

  5. 令人匪夷所思的 Magic 之魔数,你真的不会

    点击蓝色"Java极客技术"关注我哟 加个"星标",一起快乐成长 01.故事背景 试想一下你现在有个业务场景需要你识别出各种类型的文件,然后进行不同的处理,这些 ...

  6. Magic Number魔数是什么

    在网上查magic number的相关介绍的时候,看到很多人的博客中说magic number之所以叫magic number,就是因为我们并不知道它有什么含义... 最后看了知乎上的回答: Magi ...

  7. Java冷知识之——魔数(Magic Number)

    一. 编程中的魔数 在阿里巴巴Java开发手册编程规约第二节常量定义的第一条中写道: 魔法值(即魔数)指的是未经预先定义的常量,而反例中的 "Id#taobao_" 则叫做魔字符串 ...

  8. 数据可视化分析之新技能——魔数图

    数据可视化分析之新技能--魔数图 大家在使用数据可视化工具进行数据设计的时候,有没有遇到过这些设计场景:部门人员的履历细信息.工厂各个产线的生产状态和生产信息.公司各个部门的KPI信息--这些数据都有 ...

  9. Magic Number(魔数)是什么

    "魔数"有贬义词.中性词.褒义词三种用法,默认为贬义词. 1.贬义词"魔数" 指的是代码中出现的没有说明的数字.代码中突然出现一个没说明用途的数字会让其它阅读代 ...

最新文章

  1. self的含义,为什么类调用方法时需要传参数?
  2. 保护DNS对数字网络安全越来越重要
  3. python super()(转载)
  4. P6466-分散层叠算法(Fractional Cascading)【模板】
  5. 走近北京后厂村程序员的真实生活:“拿命换钱”
  6. Bootstrap 字体图标 Bootstrap Glyphicon Components
  7. Linux平台安装go并配置go环境
  8. DSP之有限字长效应
  9. java类变量 访问_在Java类中对变量或方法的访问有哪些访问控制的关键字?他们各有什么作用,举例说明。...
  10. 2022最新Nodejs下载安装配置步骤(保姆级教程)
  11. 电商屌丝生活,有点甜、有点咸
  12. 动画--easeljs中的movieClip控件示例?
  13. 经济学原理笔记-微观CP12-税制的设计
  14. openwrt 认证收费_openwrt,wifi认证-nodogsplash
  15. 为远程群晖NAS的自定义域名配置SSL证书
  16. Dell 3620 加装SSD遇到的磁盘100%的坑
  17. 论文大致思路(不断更新)
  18. c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt
  19. Python3基础教程
  20. maven 配置 (个人记录向)

热门文章

  1. EduSoho网络课堂通用版
  2. Windows10最新MySQL8.0.23安装教程(超级详细)
  3. 重磅资料!Github上的PHP资源汇总大全
  4. Web开发者必备:Web应用检查清单
  5. Update your Twitter status using php
  6. 爬虫入门二(urllib,urllib2)
  7. 大数——大数相加(hdu1002)
  8. pip安装指定版本包
  9. 【AI视野·今日CV 计算机视觉论文速览 第206期】
  10. 【python】numpy数组的维度增减方法