野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 40402|回复: 112

一新手来说说枚举

  [复制链接]
发表于 2014-8-14 18:06:07 | 显示全部楼层 |阅读模式
本帖最后由 ii童话Bū说话 于 2014-8-14 18:28 编辑

枚举是一种数据类型
定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.
在C语言等计算机编程语言中是一种构造数据类型。
它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举变量:指用枚举类型定义的变量.变量和参数都可以定义为枚举类型.过程的返回值也可以是枚举类型.
枚举成员枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。
每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。
他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!
例如:
  1.   enum Port
  2.   {
  3.     PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  
  4.     PTA6=1,  PTA7,  PTA8,  PTA9,  PTA10,
  5.     PTA11, PTA12, PTA13, PTA14, PTA15,
  6.       PTA16, PTA17, PTA18, PTA19, PTA20,
  7.   } PTXn_e;
复制代码
在枚举类型中声明的第一个枚举成员它的默值为零。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。
所以,PTA0=0,PTA1=1,PTA2=2,PTA3=3,PTA4=4,PTA5=5,
PTA6=1(赋值),PTA7=2,PTA8=3,PTA4=4……
8.jpg
/*截图是快要出版的k60书(山外哥提供)*/
基础类型必须能够表示该枚举中定义的所有枚举数值。
枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。
没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。

枚举是一种数据类型,所以他和基本数据类型一样也可以对变量进行声明。

方法一:枚举类型的定义和变量的声明分开
  1. enum Port
  2. {
  3.     PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  
  4.     PTA6,  PTA7,  PTA8,  PTA9,  PTA10,
  5.     PTA11, PTA12, PTA13, PTA14, PTA15,
  6.     PTA16, PTA17, PTA18, PTA19, PTA20, /*枚举成员*/
  7. };
  8. enum Port LED1;//枚举类型为enum Port 的变量LED1
  9. enum Port LED2;//LED2的变量类型为  enum Port
  10. LED1=PAT0;//变量LED1的值为0
  11. LED2=PAT6;//变量LED2的值为6
复制代码
方法二:类型定义与变量声明同时进行:
  1. enum Port
  2. {
  3. PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  
  4. PTA6,  PTA7,  PTA8,  PTA9,  PTA10,
  5. PTA11, PTA12, PTA13, PTA14, PTA15,
  6. PTA16, PTA17, PTA18, PTA19, PTA20, /*枚举成员*/
  7. }LED1,LED2;//变量LED1,LED2的类型为枚举型enum Port
  8. LED1=PTA0;
  9. LED2=PTA6;
复制代码
方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
  1. typedef enum Port
  2.   {
  3.     PTA0,  PTA1,  PTA2,  PTA3,  PTA4,  PTA5,  
  4.     PTA6,  PTA7,  PTA8,  PTA9,  PTA10,
  5.     PTA11, PTA12, PTA13, PTA14, PTA15,
  6.     PTA16, PTA17, PTA18, PTA19, PTA20,
  7.   } PTXn_e;
  8.   
  9.   enum Port LED1;
  10.   LED1=PTA0;
  11.   
  12.   PTXn_e LED2;
  13.   LED2=PTA1;
复制代码
个人理解:因为关键字 typedef 的存在,使得 enum Port 等价于 PTXn_e
typedef 的作用,我理解的是 相当于别人给自己起的小名(或者外号)。
此处 PTXn_e 等价于 enum Port  ,用法类似于宏定义。
注意:宏定义在预编译阶段, typedef 在编译时被解释。对于 enum 在 预编译阶段也是被跳过的!!!
但是它本身是一种存储类的关键字,所以与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。

关键字 typedef 的详细用法介绍移步 http://www.firebbs.cn/forum.php?mod=viewthread&tid=399

注:在K60的程序中的典型用法为:
节选自K60的LED程序中的 FIRE_LED.H
  1. #ifndef __FIRE_LED_H__
  2. #define __FIRE_LED_H__


  3. /*! 枚举LED编号 */
  4. typedef enum
  5. {
  6.   LED0,
  7.   LED1,
  8.   LED2,
  9.   LED3,
  10.   LED_MAX,
  11. }LED_e;

  12. /*! 枚举LED亮灭状态 */
  13. typedef enum LED_status
  14. {
  15.   LED_ON  =   0,            //灯亮(对应低电平)
  16.   LED_OFF =   1             //灯暗(对应高电平)
  17. }LED_status;


  18. extern void    led_init(LED_e);            //初始化LED端口
  19. extern void    led(LED_e,LED_status);      //设置LED灯亮灭
  20. extern void    led_turn(LED_e);            //设置LED灯亮灭反转

  21. #endif  //__FIRE_LED_H__
复制代码

也可以:
  1. typedef enum
  2. {
  3.   LED0,
  4.   LED1,
  5.   LED2,
  6.   LED3,
  7.   LED_MAX,
  8. }LED_e;//此时的LED_e是枚举型为 enum LED_e 的别名(外号)
复制代码
山外哥出的每日一题!测试一下!
http://www.firebbs.cn/forum.php?mod=viewthread&tid=1183&highlight=typedef





回复

使用道具 举报

 楼主| 发表于 2014-8-14 18:06:26 | 显示全部楼层
自己占沙发!!
回复 支持 反对

使用道具 举报

发表于 2014-8-14 20:23:35 | 显示全部楼层
我就看到到这几个“快要出版的k60书(山外哥提供)”关键词,,,什么时候的事儿
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-14 22:57:58 | 显示全部楼层
gsc617 发表于 2014-8-14 20:23
我就看到到这几个“快要出版的k60书(山外哥提供)”关键词,,,什么时候的事儿

呃!快了!书就快出来了!
回复 支持 反对

使用道具 举报

发表于 2014-8-15 11:04:15 | 显示全部楼层
ii童话Bū说话 发表于 2014-8-14 22:57
呃!快了!书就快出来了!

出版社那边说到8月底左右出。现在是教材出版的高峰时间,所以会比较慢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 20:28:40 | 显示全部楼层
山外メ雲ジ 发表于 2014-8-15 11:04
出版社那边说到8月底左右出。现在是教材出版的高峰时间,所以会比较慢

这这这……这是在坑人么……出版社好坑……
回复 支持 反对

使用道具 举报

发表于 2014-8-15 20:29:49 | 显示全部楼层
ii童话Bū说话 发表于 2014-8-15 20:28
这这这……这是在坑人么……出版社好坑……

现在都8月中旬啦,今天的进度如何?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-15 20:31:39 | 显示全部楼层
山外メ雲ジ 发表于 2014-8-15 20:29
现在都8月中旬啦,今天的进度如何?

啊啊啊!!!我去……我看错日期了……我看的是阴历……阴历七月二十!!!进度的话!巩固巩固基础!把基础扎牢再往下进行!分析程序呢!!
回复 支持 反对

使用道具 举报

发表于 2014-8-19 10:46:49 | 显示全部楼层

这有十五个字了没啊。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-8-19 16:33:58 | 显示全部楼层
k60后就没碰过了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-19 18:48:05 | 显示全部楼层
玉木 发表于 2014-8-19 16:33
k60后就没碰过了

这是基本知识撒!!!!
回复 支持 反对

使用道具 举报

发表于 2014-8-20 08:57:24 | 显示全部楼层
不错的资料。。。
回复 支持 反对

使用道具 举报

发表于 2014-8-21 00:22:06 | 显示全部楼层
恩恩。。明白了。。
回复 支持 反对

使用道具 举报

发表于 2014-9-12 20:05:21 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-9-15 10:25:35 | 显示全部楼层
占个沙发 不错抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

发表于 2014-9-15 13:22:22 | 显示全部楼层
static 到底有啥用啊 跪求详细讲解
回复 支持 反对

使用道具 举报

发表于 2014-9-25 12:22:11 | 显示全部楼层
学习学习!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2014-9-26 05:51:02 | 显示全部楼层
帅呆了,赞一个
回复 支持 反对

使用道具 举报

发表于 2014-10-4 15:02:25 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-10-8 09:22:49 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-10-10 17:05:33 | 显示全部楼层
学习学习~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2014-10-11 00:02:45 | 显示全部楼层
再学习下,睡觉了!
回复 支持 反对

使用道具 举报

发表于 2014-10-11 20:47:40 | 显示全部楼层
抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

发表于 2014-10-26 20:11:54 | 显示全部楼层
还有隐藏内容?
回复 支持 反对

使用道具 举报

发表于 2014-10-27 14:27:43 | 显示全部楼层
抢沙发~给哥们顶一个
回复 支持 反对

使用道具 举报

发表于 2014-10-28 14:56:51 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-11-2 00:25:18 | 显示全部楼层
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-11-2 00:28:10 | 显示全部楼层
山外メ雲ジ 发表于 2014-8-15 11:04
出版社那边说到8月底左右出。现在是教材出版的高峰时间,所以会比较慢

请问书名叫什么,我想买强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-11-15 15:24:13 | 显示全部楼层
进来学习学习  
回复 支持 反对

使用道具 举报

发表于 2014-11-18 11:42:25 | 显示全部楼层
认真学习真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2014-11-19 13:20:33 | 显示全部楼层
一新手来说说枚举
回复 支持 反对

使用道具 举报

发表于 2014-11-19 19:04:56 | 显示全部楼层
都没接触过美剧
回复 支持 反对

使用道具 举报

发表于 2014-11-24 21:02:34 | 显示全部楼层
:
回复

使用道具 举报

发表于 2014-11-25 16:32:10 | 显示全部楼层
很详细,看看经典的用法。
回复 支持 反对

使用道具 举报

发表于 2014-12-3 20:00:59 | 显示全部楼层
正好用得着,顶。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-12-9 14:10:06 | 显示全部楼层
顶个           
回复 支持 反对

使用道具 举报

发表于 2014-12-13 15:53:43 | 显示全部楼层
想看看   看看
回复 支持 反对

使用道具 举报

发表于 2014-12-17 16:25:21 | 显示全部楼层
kankan  daan
回复 支持 反对

使用道具 举报

发表于 2014-12-18 22:20:49 | 显示全部楼层
haogaoshen ,xuexi xuexi
回复 支持 反对

使用道具 举报

发表于 2015-1-6 11:22:39 | 显示全部楼层
枚举也是一种数据类型
回复 支持 反对

使用道具 举报

发表于 2015-1-16 20:03:47 | 显示全部楼层
回复

使用道具 举报

发表于 2015-1-18 16:16:33 | 显示全部楼层
看看啊、、
回复 支持 反对

使用道具 举报

发表于 2015-1-20 20:44:43 | 显示全部楼层
过来看看枚举用法
回复 支持 反对

使用道具 举报

发表于 2015-1-27 21:55:34 | 显示全部楼层
看看凉快快快快快快快快快快快快快卡
回复 支持 反对

使用道具 举报

发表于 2015-1-31 11:55:17 | 显示全部楼层
学习学习,谢哥们
回复 支持 反对

使用道具 举报

发表于 2015-2-1 15:34:07 | 显示全部楼层
不错不错,,,,,
回复

使用道具 举报

发表于 2015-2-2 16:53:44 | 显示全部楼层
学习一下枚举。。。。。
回复 支持 反对

使用道具 举报

发表于 2015-2-3 21:47:17 | 显示全部楼层
基础不是太扎实,学到了不少
回复 支持 反对

使用道具 举报

发表于 2015-2-16 20:54:03 | 显示全部楼层
看看。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2015-3-12 10:36:20 | 显示全部楼层
kankan sha dong xi
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-17 04:11 , Processed in 0.080207 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表