社区
C语言
帖子详情
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
suolaisi
2011-01-30 06:37:45
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
...全文
1129
18
打赏
收藏
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangyu19910407
2013-07-22
打赏
举报
回复
枚举是个不错的东西,方便开发人员阅读和利用代码
wizard_tiger
2011-01-31
打赏
举报
回复
#define 只是简单的字符替换。
而枚举类型是整型常量。
pang123hui
2011-01-31
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 suolaisi 的回复:
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
枚举常量与宏的区别主要有几点:
1。枚举常量是实体中的一种,但宏不是实体;
2。枚举常量属于常量,但宏不是常量(有些书把类对象宏称为预处理常量,这是错误的说法,标准C/C++没有预处理常量这种不知从哪里冒出来的说法);
3。枚举常量具有类型,但宏没有类型,枚举变量具有与……
[/Quote]
一直再向你学习,呵呵
pang123hui
2011-01-31
打赏
举报
回复
经常需要为某些属性定义一组可 选择的值。例如,文件打开的状态可能会有三种:输入、输出和追加。记录这些状态值的一种方法是使每种状态都与一个唯一的常数值相关联。我们可能会这样编写 代码:
const int input = 0;
const int output = 1;
const int append = 2;
虽然这种方法也能奏效,但是它有个明显的缺点:没有指出这些值是相关联的 。 枚举 ( enumeration )提供 了一种替代的方法,不但定义了整数常量集,而且还把它们进行了分组。
1. 定义和初始化枚举
枚举的定义包括关键字 enum ,其后是一个可选的枚举类型名,和一个 用花括号括起来、用逗号分开的 枚举成员 ( enumerators ) 列表。
// input is 0, output is 1, and append is 2
enum open_modes {input, output, append};
默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大 1 。
2. 枚举成员是常量
可以为一个或多个枚举成员提供初始值,用来初始化 枚举成员的值必须是一个 常量表达式 ( constant expression ) 。常量表达式是编译器在编译时就能够计算出结果的整型表达式。整型字面值常量是常量表达式,正如一个通过常量表达式自我初始化的 const 对象( 2.4 节)也是常量表达式一样。
例如,可以定义下列枚举类型:
// shape is 1,sphereis 2,cylinderis 3,polygonis 4
enum Forms {shape = 1, sphere, cylinder, polygon};
在枚举类型 Forms 中,显式将 shape 赋 值为 1 。 其他枚举成员隐式初始化: sphere 初始化为 2 , cylinder 初始化为 3 , polygon 初始化为 4 。
枚举成员值可以是不唯一的。
// point2d is2, point2w is3, point3d is3, point3w is4
enum Points { point2d = 2, point2w,
point3d = 3, point3w };
本例中,枚举成员 point2d 显式初始化为 2 。下一 个枚举成员 point2w 默认初始化,即它的值比前一枚举成员的值大 1 。因 此 point2w 初始化为 3 。枚举 成员 point3d 显式初始化为 3 。一 样, point3w 默认初始化,结果为 4 。
不能改变枚举成员的值。枚举成员本身就是一个常量 表达式,所以也可用于需要常量表达式的任何地方 。
3. 每个enum 都 定义一种唯一的类型
每个 enum 都定义了一种新的类型。和其他类型一样,可以定义和初始化 Points 类型的对象,也可以以不同的方式使用这些对象。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚 举类型的其他对象来进行:
Points pt3d = point3d; // ok: point3d is aPoints enumerator
Points pt2w = 3; // error:pt2winitialized withint
pt2w = polygon; // error:polygonis not aPointsenumerator
pt2w = pt3d; // ok: both are objects ofPoints enumtype
注意把 3 赋给 Points 对象是非法的,即使 3 与一个 Points 枚举成员相关联。
宏和枚举的区别(#define VS enum)
宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不 存在了。而枚举是在程序运行之后才起作用的, 枚举常量存储在数据段的静态存储区里 。宏占用代码段的空间,而 枚举除了占用空间,还消耗CPU资源。
但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条enum {.....}明显比一大堆define更清晰,枚举也可以用来定义一些特殊类型,比如Bool,如:
type enum {FALSE,TRUE} Bool;
qpx1125
2011-01-31
打赏
举报
回复
枚举是一种类型,可以定义该类型的一个变量,define则不行
typedef enum {
NORTH, SOUTH, WEST, EAST
} Direction;
typedef enum {
BIG, MIDDLE, SMALL
} Size;
void f(Direction d, Size s)
{}
把同属一类的放在一起,具有类型检查,看起来更舒服,不必关心 NORTH 具体被定义成哪个数字
AnYidan
2011-01-31
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 suolaisi 的回复:
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
枚举常量与宏的区别主要有几点:
1。枚举常量是实体中的一种,但宏不是实体;
2。枚举常量属于常量,但宏不是常量(有些书把类对象宏称为预处理常量,这是错误的说法,标准C/C++没有预处理常量这种不知从哪里冒出来的说法);
3。枚举常量具有类型,但宏没有类型,枚举变量具有与……
[/Quote]
引用一下,惭愧从未用过枚举
pengzhixi
2011-01-31
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 suolaisi 的回复:
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
枚举常量与宏的区别主要有几点:
1。枚举常量是实体中的一种,但宏不是实体;
2。枚举常量属于常量,但宏不是常量(有些书把类对象宏称为预处理常量,这是错误的说法,标准C/C++没有预处理常量这种不知从哪里冒出来的说法);
3。枚举常量具有类型,但宏没有类型,枚举变量具有与……
[/Quote]
很久不见了。
xwfde
2011-01-31
打赏
举报
回复
看微软的代码基本没有枚举,事实上我没发现过一处枚举,总之我不用枚举,VC也不支持枚举的一些特性,别用了吧
jackzhhuang
2011-01-31
打赏
举报
回复
能用枚举尽量使用枚举,否则使用宏,跟踪代码的时候看到的都是数字,这样就得费脑力去记数字的意义,我遇到这种情况很想骂人的。
maoloverme1
2011-01-31
打赏
举报
回复
请看《Effective C++》第三版的第02条款,写的很清楚。
FrankHB1989
2011-01-31
打赏
举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
引用楼主 suolaisi 的回复:
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
枚举常量与宏的区别主要有几点:
1。枚举常量是实体中的一种,但宏不是实体;
2。枚举常量属于常量,但宏不是常量(有些书把类对象宏称为预处理常量,这是错误的说法,标准C/C++没有预处理常量这种不知从哪里冒出来的说法);
3。枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有;
[/Quote]
宏名有作用域。
注意作用域是标识符/名称的性质,不是实体的性质。
ischarles
2011-01-31
打赏
举报
回复
主要是为了让程序更容易阅读,如果光写数字,别人是看不懂的
qudaxiao2
2011-01-31
打赏
举报
回复
例:
#define ZERO(x) memset(x, 0, sizeof(x))
enum的话就不行了,只能是整形....
飞天御剑流
2011-01-30
打赏
举报
回复
[Quote=引用楼主 suolaisi 的回复:]
为什么要有枚举类型?枚举类型和define定义出来的常量有什么区别?
[/Quote]
枚举常量与宏的区别主要有几点:
1。枚举常量是实体中的一种,但宏不是实体;
2。枚举常量属于常量,但宏不是常量(有些书把类对象宏称为预处理常量,这是错误的说法,标准C/C++没有预处理常量这种不知从哪里冒出来的说法);
3。枚举常量具有类型,但宏没有类型,枚举变量具有与普通变量相同的诸如作用域、值等性质,但宏没有;
枚举类型主要用于限制性输入,例如,某个函数的某参数只接受某种类型中的有限个数值,除此之外的其它数值都不接受,这时候枚举能很好地解决这个问题。
昵称很不好取
2011-01-30
打赏
举报
回复
define只是简单的替换,而enum是变量定义,可以检查,更安全,具体看看书,或是google吧
我的职业是看店铺的
2011-01-30
打赏
举报
回复
enum define 看书去
漫步者、
2011-01-30
打赏
举报
回复
枚举类型和define定义出来的常量
define 它可是是任意类型的数据
而枚举只能是整型的数据
yuppy
2011-01-30
打赏
举报
回复
枚举类型 只接受分配时预先定义的值集合,方便操作一些变量呗
枚举
常量
在单片机编程中有何好处
什么时候需要用到enum呢?当变量的数值在几个范围之间,如一个week变量取值只有Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。这样用enum比较好。当然也可以用
define
.但是
define
维护起来比较麻烦, 适合变量的数值范围值较少的时候。 1、用enum关键字说明
常量
(即说明枚举
常量
)有以下几点好处: (1) 使程序更容易维护和直观。例如,下面
定义
的枚举是描述UART支持的传输bit位数,从
枚举类型
的
定义
就可以知道UART模块提供的传输bit的几种模式。 enum{usartDatabits4=USART_FRAME_DATABITS_FOUR,/*4databits(notavailableforUART).*/usartDatabits5=USART_FRAME_DATABITS_FIVE,/**《5databits(notavailableforUART).*/usartDatabits6=USART_FRAME_DATABITS_SIX,/**《6databits(notavailablef
c语言
常量
和变量有什么
区别
?
c语言
常量
和变量有什么
区别
? c语言
常量
常量
是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量
可以是任何的基本数据类型,比如整数
常量
、浮点
常量
、字符
常量
,或字符串字面值,也有枚举
常量
。
常量
就像是常规的变量,只不过
常量
的值在
定义
后不能进行修改。 在 C 中,有两种简单的
定义
常量
的方式: 1.使用 #
define
预处理器。 2.使用 const 关键字。 c语言变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 什么是
常量
,变量你懂了吗? 作者:厉害2333
172集通俗易懂的C语言从入门到项目实战教程
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容:
常量
-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自
定义
函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预
定义
符号、#
define
和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自
定义
类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o
常量
、i/o函数、流)。
C#中变量、
常量
、枚举、预处理器指令知多少
一、变量 C#共有其中变量类型有:静态变量、实类变量、数组元素、数值参数、引用参数、输出参数和局部变量 先
定义
一个简单的类来说明,如下: public class Variable
Define
{ private static uint variableUInt; public static uint VariableUInt { get => variableUInt; set => variableUInt = value; } string VariableStr; public Variable
Define
(string version)
C语言枚举和
define
定义
常量
区别
;typedef和#
define
区别
;static和typedef
区别
一.枚举和
define
定义
常量
有什么
区别
? 1.#
define
定义
的
常量
不可以进行调试 2.#
define
定义
的标识符
常量
布局由类型 3.枚举具有类型 **二.*typedef 和 #
define
有什么
区别
? 1.
define
没有参加编译,在预处理的时候被替换掉了。 2.typedef参加编译和连接。typedef是重命名,可以为枚举结构体等重新命名,提高代码整洁。 3.typedef intA...
C语言
69,394
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章