【编程好习惯】避免使用魔数
魔数(magic number),即在编写程序时直接在程序中运用数字,而不是采用定义宏或是const变量的方式,图1是使用了魔数的一个示例程序。其中的64是指Msk的最大字节数。从这一程序中可以看出,Msk的最小字节数是MIN_MSK_LEN,即20。采用魔数的危害有:
1) 降低了程序的可读性。有人可能会提出,那加一些注释不就完了吗?如果真是采用加注释的方式,那为什么不将其定义成一个宏或是const常量呢?要知道查看注释的效率肯定没有直接看代码来得快和方便,也不存在不同步的问题(代码与注释有可能不同步)。
2) 如果下一次这个最大值要从64改为128,那得在adjustMask()中对每一处都进行更改。另外,当一个项目较大时,魔数的存在会使得程序维护非常、非常困难。
由此看来,这里的“魔”不应理解成象“魔法(magic)”那样神奇,而应理解为象“魔鬼(monster)”那样可怕。
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: }
图2是采用宏之后的版本。其中定义了MAX_MSK_LEN的大小为64,如果其它函数中也需要用到Msk的最大值,那么也可以引用这一宏。如果下一次想将最大值从64改为128时,只要改MAX_MSK_LEN宏的定义就行了。另外,这种宏定义的存在有利于模块与模块之间共享,从而在一定程度上提高重用性。
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: }
转载于:https://blog.51cto.com/yunli/265730
【编程好习惯】避免使用魔数相关推荐
- 聊聊编程中的 “魔数”
大家好,我是鱼皮,无意间在网上看到了这么一张图: 刚看到这段代码时,我是比较吃惊的,作者竟然使用了一个英文单词 deadbeef 来定义宏常量! 我本来以为只是一位幽默的程序员的小玩笑,但后来查阅资料 ...
- python magic number_编程中的「魔数」(magic number)是什么意思?平时我们能接触到哪些魔数?...
"魔数"有贬义词.中性词.褒义词三种用法,默认为贬义词. 1.贬义词"魔数" 指的是代码中出现的没有说明的数字.代码中突然出现一个没说明用途的数字会让其它阅读代 ...
- 小知识 | Java中的“魔数”
转载自 小知识 | Java中的"魔数" 在编程过程中,我们可能经常听到"魔数"这个词,那么这个词到底指的是什么呢?什么数叫做魔数呢? 一.标识文件类型的&qu ...
- 魔数(magic number)
魔数是编程中我们需要尽量避免使用的,但是很多人不去管也不清楚. 百度百科中解释如下: 很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此).根据这几个字节的内容 ...
- 令人匪夷所思的 Magic 之魔数,你真的不会
点击蓝色"Java极客技术"关注我哟 加个"星标",一起快乐成长 01.故事背景 试想一下你现在有个业务场景需要你识别出各种类型的文件,然后进行不同的处理,这些 ...
- Magic Number魔数是什么
在网上查magic number的相关介绍的时候,看到很多人的博客中说magic number之所以叫magic number,就是因为我们并不知道它有什么含义... 最后看了知乎上的回答: Magi ...
- Java冷知识之——魔数(Magic Number)
一. 编程中的魔数 在阿里巴巴Java开发手册编程规约第二节常量定义的第一条中写道: 魔法值(即魔数)指的是未经预先定义的常量,而反例中的 "Id#taobao_" 则叫做魔字符串 ...
- 数据可视化分析之新技能——魔数图
数据可视化分析之新技能--魔数图 大家在使用数据可视化工具进行数据设计的时候,有没有遇到过这些设计场景:部门人员的履历细信息.工厂各个产线的生产状态和生产信息.公司各个部门的KPI信息--这些数据都有 ...
- Magic Number(魔数)是什么
"魔数"有贬义词.中性词.褒义词三种用法,默认为贬义词. 1.贬义词"魔数" 指的是代码中出现的没有说明的数字.代码中突然出现一个没说明用途的数字会让其它阅读代 ...
最新文章
- self的含义,为什么类调用方法时需要传参数?
- 保护DNS对数字网络安全越来越重要
- python super()(转载)
- P6466-分散层叠算法(Fractional Cascading)【模板】
- 走近北京后厂村程序员的真实生活:“拿命换钱”
- Bootstrap 字体图标 Bootstrap Glyphicon Components
- Linux平台安装go并配置go环境
- DSP之有限字长效应
- java类变量 访问_在Java类中对变量或方法的访问有哪些访问控制的关键字?他们各有什么作用,举例说明。...
- 2022最新Nodejs下载安装配置步骤(保姆级教程)
- 电商屌丝生活,有点甜、有点咸
- 动画--easeljs中的movieClip控件示例?
- 经济学原理笔记-微观CP12-税制的设计
- openwrt 认证收费_openwrt,wifi认证-nodogsplash
- 为远程群晖NAS的自定义域名配置SSL证书
- Dell 3620 加装SSD遇到的磁盘100%的坑
- 论文大致思路(不断更新)
- c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt
- Python3基础教程
- maven 配置 (个人记录向)