enum define是什么意思哪个好

我的更多文章
同时转发到微博C语言中宏_函数和Enum的优与劣_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言中宏_函数和Enum的优与劣
C​语​言​中​宏​_​函​数​和​E​n​u​m​的​优​与​劣
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢与用#define指令说明常量相比,用enum关键字说明常量有什么好处?
与用#define指令说明常量(即说明标识符常量)相比,用enum关键字说明常量(即说明枚举常量)有以下几点好处: (1) 使程序更容易维护,因为枚举常量是由编译程序自动
与用#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)使程序更易读,这样别人修改你的程序时就比较方便。请看下例:
&&& void copy_file(char*& source_file_name,& char *& dest_file_name)
&&&&&&& ......
&&&&&&& Error_Code,err;
&&&&&&& ......
&&&&&&& if(drive_ready()!=TRUE)
&&&&&&& err=DRIVE_NOT_READY;
&&&&&&& ......
在上例中,从变量err的定义就可以看出;赋予err的值只能是枚举类型Error_Code中的数值。因此,当另一个程序员想修改或增加上例的功能时,他只要检查一下Error_Code的定义,就能知道赋给err的有效值都有哪些。
&注意:将变量定义为枚举类型后,并不能保证赋予该变量的值就是枚举类型中的有效值。
在上例中,编译程序并不要求赋予err的值只能是Error&Code类型中的有效值,因此,程序员自己必须保证程序能实现这一点。
相反,如果常量原来是用#define指令说明的,那么上例就可能如下所示:
&&& void copy_file(char *source *file,char *dest_file)
&&&&&&& ......&
&&&&&&& int err;
&&&&&&& ......
&&&&&&& if(drive_ready()!=TRUE)
&&&&&&&&&&& err=DRIVE_NOT_READY;
&&&&&&& ......
当另一个程序员想修改或增加上例的功能时,他就无法立即知道变量err的有效值都有哪些,他必须先检查头文件中的#defineDRIVE_NOT_READY语句,并且寄希望于所有相关的常量都在同一个头文件中定义。
(3)使程序调试起来更方便,因为某些标识符调试程序能打印枚举常量的值。这一点在调试程序时是非常用的,因为如果你的程序在使用枚举常量的一行语句中停住了,你就能马上检查出这个常量的值;反之,绝大多数调试程序无法打印标识符常量的值,因此你不得不在头文件中手工检查该常量的值。搜索相关文章:(责任编辑:admin)顶一下(0)0%踩一下(0) 0%
------分隔线----------------------------上一篇: 下一篇:
发表评论评价:中立好评差评
发表评论 最新评论
WIN7视频教程 Win 7的UI及操行性都比XP好很多,与Vista相比,所消耗的资源也较少,系...
Excel VBA基础教程 Excel VBA 教程是把 VB 编程应用在 Excel 平台的一套实用教程, Ex...
VB教程003 主窗口的组成(2)...
女生最爱!索尼TX3笔记本性感上市,,女生最爱!索尼TX3笔记本性感上市,,女生最爱!索尼...
NEC S3000这款集苹果优点于一身的日系本机上市之后一直受到许多MM们的关注,因为它类...
第一课 Windows编程和面向对象技术
  1.1 Windows发展历史
  1.2 Windows操作...define、enum、const的不同
宏define是在预处理阶段进行替换的,它替换了程序中的文本,到程序运行时,文本已经不存在了。define的作用域是整个文件,对数据类型没有限制,因此它不安全。
enum被限制在只能表示整数,作用域只能在对应的规定范围内,存储空间在静态存储区。枚举类型还消耗cpu资源,而define不消耗cpu资源。
const和define类似,但是C++倡导使用const,因为const有类型检查,是安全的,而define没有类型检查。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置: >
const,enum,inline替换#define
时间: 15:29 来源:未知 作者:小可 阅读:次
基本上使用预处理指令#define的地方都可以使用const,enum或者inline来替换掉它。主要的原因有两个:
#define ASPECT_RATIO 1.653
1.预处理指令是在编译前就进行预处理的(gcc -E进行预处理,它的输出文件作为gcc -S进行编译的输入),所以编译器是看不到#define定义的符号ASPECT_RATIO ,故它不会出现在符号表中,这样如果编译期间出现了错误它可能只提示常量1.653,如果这个文件又不是你写的,那么调试会很困难。
2.使用常量可能比使用#define产生更少的代码,#define进行替换的时候会将ASPECT_RATIO 都替换成1.653,这样在目标代码中会出现多个1.653,但是使用const就不会有这个问题。
基于以上两个原因应该尽可能在使用#define的时候替换成const,enum,或者inline
使用const替换
如果需要在一个类中使用一个常量,可以在类内定义一个static const的常量来避免使用#define。static和const这两个关键字可以参考之前的这篇博客。
class GamePlayer
static const int intNum=5;//常量声明式
int scores[intNum];//使用该常量
如果需要取intNum的地址,还需要在实现文件中加上:
const int GamePlayer::intN//定义
如果这个常量不是整型的,那么它不能在类中就赋初值,只能在实现文件中赋初值。但是如果编译器不支持整型在声明时就指定一个初值,可以使用枚举类型来替代。
使用enum替换
class GamePlayer
enum {NumTurns=5 };
int scores[NumTurns];//使用枚举类型
这样就可以避免使用的,需要注意的是不要对枚举变量进行取址操作,因为&操作符需要的操作数是左值,而枚举变量是右值,在gcc中使用取址操作时会出现下面的编译错误:
(责任编辑:小可)

我要回帖

更多关于 define是什么意思 的文章

 

随机推荐