C语言中枚举的使用

       在我这几年的嵌入式软件开发工作期间,使用枚举的次数十分有限。在别人的代码中倒是用过,自己创建的枚举类型真是屈指可数。在《C专家编程》中有一段描述:像C语言这样的弱类型语言而言,很少有什么事情只能够靠枚举完成而不能够用#define来实现。后者的功能在我的代码中确实是出现的很多,但是枚举类型的优势在于其名字在调试器中都是可见的,这样对于调试代码来说是更为便利一点的。

       在结构使用上,枚举的语法格式跟结构体相似,但是枚举的内容块中成员之间的分隔使用的是逗号而不是分号。

代码1:

#include"stdio.h"

 

enum demo_tag{

       a = 1,

       b = 3,

       c = 5

} var1 = a,var2 =b,var3 = c;

 

int main(void)

{

       printf("value of a:%d\n",var1);

       printf("value of b:%d\n",var2);

       printf("value of c:%d\n",var3);

 

       return 0;

}

       上述代码在编译后的执行结果:

E:\WorkSpace\01_编程语言\01_C语言\exp_24>a

value of a: 1

value of b: 3

value of c: 5

       在没有专门指定时,成员(其实不是成员,应该叫做标识符)的整型值默认从0开始,这让我觉得很多时候枚举不过是整型的一种可读性加强的替代。如果指定之后,某个紧跟其后的标识符的数值会比它大一个数。

代码2:

#include"stdio.h"

 

enum demo_tag{

       a = 1,

       b = 3,

       c = 5,

       d

} var1 = a,var2 =b,var3 = c,var4 = d;

 

int main(void)

{

       printf("value of a:%d\n",var1);

       printf("value of b:%d\n",var2);

       printf("value of c:%d\n",var3);

       printf("value of d:%d\n",var4);

 

       return 0;

}

       代码的编译执行结果:

E:\WorkSpace\01_编程语言\01_C语言\exp_25>gcc exp_25.c

 

E:\WorkSpace\01_编程语言\01_C语言\exp_25>a

value of a: 1

value of b: 3

value of c: 5

value of d: 6

       从上面的运行结果可以看出标识符的增长规律。不过,这种规则在使用不当的时候就会带来程序上的问题。比如如下代码:

#include"stdio.h"

 

enum demo_tag{

       a = 1,

       b = 3,

       c = 5,

       d,

       e = 6

} var1 = a,var2 =b,var3 = c,var4 = d,var5 = e;

 

int main(void)

{

       printf("value of a:%d\n",var1);

       printf("value of b:%d\n",var2);

       printf("value of c:%d\n",var3);

       printf("value of d:%d\n",var4);

       printf("value of e:%d\n",var5);

 

       return 0;

}

       程序的编译执行结果:

E:\WorkSpace\01_编程语言\01_C语言\exp_25>gcc exp_25.c

 

E:\WorkSpace\01_编程语言\01_C语言\exp_25>a

value of a: 1

value of b: 3

value of c: 5

value of d: 6

value of e: 6

       d和e所代表的数值都是6,两者相同。这虽然编译以及运行没有问题,但是通常却不是我们想要的结果。

       同struct结构体一样,使用typedef构造新的数据类型别名能够让枚举类型的定义更为简洁一点。具体如下:

#include"stdio.h"

 

typedef enumdemo_tag{

       a = 1,

       b = 3,

       c = 5,

       d,

       e = 6

} demo_t;

 

demo_t var1 =a,var2 = b,var3 = c,var4 = d,var5 = e;

 

int main(void)

{

       printf("value of a:%d\n",var1);

       printf("value of b:%d\n",var2);

       printf("value of c:%d\n",var3);

       printf("value of d:%d\n",var4);

       printf("value of e:%d\n",var5);

 

       return 0;

}

       代码的编译执行结果:

E:\WorkSpace\01_编程语言\01_C语言\exp_25>gcc exp_25.c

 

E:\WorkSpace\01_编程语言\01_C语言\exp_25>a

value of a: 1

value of b: 3

value of c: 5

value of d: 6

value of e: 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值