出现在幻数——上下文中的字面常量。

幻数带来的主要问题是它们没有(抽象)语义在阅读和维护具有幻想数据的代码时,必须逐一弄清楚赤裸裸的量意味着什么。 是的。 虽然这样也能勉强生活,但会带来不必要的能源浪费和准确性的丧失。

1 //这里的10个分别是什么意思? 是什么?

2类投资

3 {

4 //.

5 Contact *contracts_[10];

6 char id_[10];

7 };

8

9 ……

10

11for(intI=0; i 10; I )

12 . 幻数的另一个不那么显而易见的坏处就是它会以意想不到的方式降低它所代表的类型的精度。

例如,4000,实际类型与平台相关。

另一个字面常量带来的潜在威胁来源于它们没有地址。

给幻数起一个名字作为指南,除了0和1之外,程序中出现的数大体上可以看作是虚幻的数,它们应该有自己的名字。

1类投资

2 {

3 //.

4 enum {maxContracts=10,idLen=10};

5 contact * contracts _ [ max contracts ];

6 char id_[idLen ];

7 }; 其作用域有明确意义的枚举常数,具有不占空间,也没有运行时成本的很大优点。

把数定义为常数,不要定义为宏c语言的传统方式是使用#define行来处理幻数。 C语言预处理器是一个强大的工具,但有点鲁莽。 使用宏编程是一种危险的方法。 因为宏会在背后改变程序的词法结构。 我们应该让语言做正确的工作(c预处理指令本身不是c语言的组成部分)。

在c/c中,整数常量可以用枚举语句声明。 在c中,任何类型都可以使用const声明中的常量。

1 const int MAXROW=24,MAXCOL=80; 在Java中,可以在final中声明:

1 static final int MAXROW=24,MAXCOL=80; C语言也有const值,但不能用作数组边界。 这样,enum是c中唯一的选择。

转载于:https://www.cn blogs.com/harrysun/archive/2012/02/07/2341780.html