幻数——上下文里出现的字面常量。
程序需要有
可读性,简洁性
,所以我们在写代码的时候要尽量减少幻数的出现,使程序具有更高的可读性。
幻数带来的主要问题是
1.它们没有(抽象)语义。当我们阅读和维护带有幻数的代码时,不得不去一个个地搞清楚每个光秃秃的量到底代表的是什么意思。没错,这样也能勉强度日,但带来的是不必要的精力浪费以及准确性的丧失。
2.
幻数的另一个不那么显而易见的坏处就是它会以意想不到的方式降低它所代表的类型的精度。
3.
字面常量带来的潜在威胁来源于它们没有地址
下面给两段代码比较一下幻数对程序的危害。
#include<stdio.h>
/*打印华氏温度-摄氏温度表*/
int main(){
int fahr;
for(fahr=0;fahr<=300;fahr+=20)
printf("%3d %6.1f\n",fahr,(5.0/9.0)*(fahr-32));
}
#include<stdio.h>
#define lower 0 //温度表下限
#define upper 300//温度表上限
#define step 20//步长
/*打印华氏温度-摄氏温度表*/
int main(){
int fahr;
for(fahr=lower;fahr<=upper;fahr+=step)
printf("%3d %6.1f\n",fahr,(5.0/9.0)*(fahr-32));
}
怎么样,看起来是不是好很多啊。
解决方法
我们消除幻数一般会用
宏,枚举
两种方式。
但是在c语言中的C语言预处理程序使用宏会在暗地里改变程序的词法结构。所以推荐使用
枚举
。
#include<stdio.h>
enum
{//记得一定要在每个枚举元素后面打逗号,要不然有error
lower=0,
upper=300,
step=20,
};
int main(){
int fahr;
for(fahr=lower;fahr<=upper;fahr+=step)
printf("%3d %6.1f\n",fahr,(5.0/9.0)*(fahr-32));
}
文章参考:
添加链接描述
版权声明:本文为qq_46069713原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。