#define与enum,你不知道的那些事

 2023-09-15 阅读 14 评论 0

摘要:什么时候需要用到enum呢,就是变量的数值在几个范围之间.red,blue,black.这样用enum比较好.当然也可以用define.但是define维护起来比较麻烦. #define 适合比较少的变量的时候. 用enum关键字说明常量(即说明枚举常量)有以下几点好处: (1) 使程序更容易维护,因

      什么时候需要用到enum呢,就是变量的数值在几个范围之间.red,blue,black.这样用enum比较好.当然也可以用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
    上述两例的结果是相同的。


(2) 使程序调试起来更方便,因为某些标识符调试程序能打印枚举常量的值。这一点在调试程序时是非常用的,因为如果你的程序在使用枚举常量的一       行语句中停住了,你就能马上检查出这个常量的值;反之,绝大多数调试程序无法打印标识符常量的值,因此你不得不在头文件中手工检查该常量      的值。

枚举与宏定义的区别和联系:

枚举和define都可以swtich,枚举是类型安全的,define不是类型安全的。枚举只能定义整形值,define能定义几乎任何值

enumNodeType { AND, OR};

voidmain()

{

NodeType type;

switch(type)  

{

caseAND:break;

caseOR:break;  

}

return0;

}


宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理

的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已

存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的

静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU

资源。 


但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条

enum {.....}明显比一大堆define更清晰,枚举也可以用来定义一

特殊类型,比如Bool,如: 

type enum {FALSE,TRUE} Bool;


总结:

define特点:优点:宏定义可为多种类型的值,如字符串、整型、浮点型等。缺点:没有范围限制(全局范围有效),容易发生冲突,产生不确定的结果;多个相关的值一起定义时比较散乱。
enum特点:缺点:只能为整型值优点:遵循范围规则,不易和其它定义发生冲突。多个相关值一组,比较清晰。
一般情况下二者可选时尽量用enum。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/61197.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息