enum的好处与 define 的区别
来源:互联网 发布:理财产品网络推广方案 编辑:程序博客网 时间:2024/05/01 10:33
什么时候需要用到enum呢?就是变量的数值在几个范围之间。
red,blue,black.这样用enum比较好.当然也可以用define.但是define维护起来比较麻烦. #define 适合比较少的变量的时候.
在上例中,OUT_OF_MEMORY等枚举常量依次被编译程序自动赋值为0,1,2和3。 同样,你也可以用#define指令说明类似的一组常量,请看下例:
上述两例的结果是相同的。假设你要增加两个新的常量,例如DRIVE_NOT_READY和CORRUPT_FILE。如果常量原来是用enum关键字说明的,你可以在原来的常量中的任意一个位置插入这两个常量,因为编译程序会自动赋给每一个枚举常量一个唯一的值;如果常量原来是用#define指令说明的,你就不得不手工为新的常量赋值。在上面的例子中,你并不关心常量的实际值,而只关心常量的值是否唯一,因此,用enum关键字说明常量使程序更容易维护,并且能防止给不同的常量赋予相同的值。
4、宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源。
red,blue,black.这样用enum比较好.当然也可以用define.但是define维护起来比较麻烦. #define 适合比较少的变量的时候.
与用#define指令说明常量(即说明标识符常量)相比,用enum关键字说明常量(即说明枚举常量)有以下几点好处:
1、使程序更容易维护,因为枚举常量是由编译程序自动生成的,而标识符常量必须由程序员手工赋值。例如,你可以定义一组枚举常量,作为程序中可能发生的错误的错误号,请看下例:
enum Error_Code{OUT_OF_MEMORY,INSUFFICIENT_DISK_SPACE,LOGIC_ERROR,FILE_NOT_FOUND}
在上例中,OUT_OF_MEMORY等枚举常量依次被编译程序自动赋值为0,1,2和3。 同样,你也可以用#define指令说明类似的一组常量,请看下例:
#define OUT_OF_MEMORY 0 #define INSUFFICIENT_DISK_SPACE 1 #define LOGIC_ERROR 2 #define FILE_NOT_FOUND 3
上述两例的结果是相同的。假设你要增加两个新的常量,例如DRIVE_NOT_READY和CORRUPT_FILE。如果常量原来是用enum关键字说明的,你可以在原来的常量中的任意一个位置插入这两个常量,因为编译程序会自动赋给每一个枚举常量一个唯一的值;如果常量原来是用#define指令说明的,你就不得不手工为新的常量赋值。在上面的例子中,你并不关心常量的实际值,而只关心常量的值是否唯一,因此,用enum关键字说明常量使程序更容易维护,并且能防止给不同的常量赋予相同的值。
2、使程序调试起来更方便,因为某些标识符调试程序能打印枚举常量的值。这一点在调试程序时是非常用的,因为如果你的程序在使用枚举常量的一行语句中停住了,你就能马上检查出这个常量的值;反之,绝大多数调试程序无法打印标识符常量的值,因此你不得不在头文件中手工检查该常量的值。
3、枚举和define都可以swtich,枚举是类型安全的 define不是类型安全的,枚举只能定义整形值,define能定义几乎任何值
enum NodeType {AND, OR}; void main() { NodeType type; switch(type){ case AND:break; case OR:break; } return 0; }
4、宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源。
但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条enum {.....}明显比一大堆define更清晰。
0 0
- enum的好处与 define 的区别
- #define与enum的区别
- 枚举enum与#define 宏的区别?
- enum,#define,const的区别
- typedef的用法好处及与#define的区别
- enum和typedef 与#define宏定义的区别
- #define、const、enum的用法及区别
- define const enum 三者的区别
- 宏以及#define;enum;comst的区别
- 枚举enum与typedef enum的区别
- 【C语言复习(三)】enum、typedef 和#define的分析与区别
- 论define,const,enum三者的区别
- #define宏定义和const及enum枚举的区别
- #define与enum,你不知道的那些事
- #define与enum,你不知道的那些事
- #define与enum,你不知道的那些事
- typedef与#define的区别
- #typedef与#define的区别
- Canopy聚类算法
- system.currentTimeMillis() 将时间存储为int类型
- Flash builder 4.6 注册
- TOMCAT下配置项目路径
- Oracle 11g 导出空表方法
- enum的好处与 define 的区别
- UVA340 - Master-Mind Hints
- Linux中VMware虚拟机增加磁盘空间的扩容操作
- mysql远程访问授权,创建用户并授权
- Android开源项目汇总
- R语言中最强的神经网络包RSNNS
- 设计模式-观察者模式
- 10个你能参与并学习的Java开源github项目
- 大数据十大经典算法之EM算法