说明
- 阅读代码时,会发现很多用到的具体数字无法体现其自身的含义,只有存在注释或者变量命名清晰的情况下具体数字含义好理解点。
- 这些令人无法理解的具体数字被称为幻数/魔数,幻数/魔数的存在会影响代码的可读性和可理解性,例如:源程序中的幻数/魔数,除了代码的作者之外,其他人可能根本不知道这些数字的含义是什么,甚至时间长了,作者也忘了为什么使用该数字。
- 总结:具体的数字无法表明其自身的含义,只能借助字符串。
改善方式
基础方式
- 注释
- 命名清晰
宏替换
- 使用宏替换,由于宏是字符串形式的,用户可以借助它理解数字的含义。
- 简单,单独的变量使用,例如:
* 变量定义
int a = 1;
* 判断
if (a > 1)
* 这些情况下通常会利用宏定义来代替这些幻数/魔数,例如:
定义:#define MAX 1
使用:a = MAX; if (a > MAX)
- 数组使用,例如:
* GUI编程需要定义5个按键,Class,Pop,....
定义:button[5];
使用:button[0].txt = ""; button[1].txt = "";
* 这种写法不灵活,并且使用时容易弄混,如果需要交换一下,改动起来要非常细心;可以使用枚举来优化,如果还有额外的信息,可以通过数组或者map进行映射,button的txt属性都不同,改善如下:
enum ButtonItem{
Min = -1,
Class,
Pop,
....,
Max,
}
char **ButtonTxt[Max - Min] = {
"Class",
"Pop",
....,
}
定义:button[Max - Min];
使用:
1. 通用的设置可以通过遍历实现
for (i = (ButtonItem)0; i < Max; i++)
button[i].color = "";
button[i].txt = ButtonTxt[i];
2. 不通用的设置可以单独设置
button[Class].txt = "";
* 注意点:
1. 枚举中的Min和Max是额外添加的范围界定标示,从而能够实现枚举的遍历。
2. 枚举项的值不能手动改变,因为需要连续,遍历时才不会出错。