关于枚举型enum使用在计算和比较时,类型不正确的解决办法

写代码的时候,enum我们当然时经常使用,但是常常很多人没有注意到类型的问题,enum是个常量类型,不能与其他类型直接作比较或计算。

参考代码如下:

typedef enum{
part1 = 0x00,
part2 = 0x01,
part3 = 0x02,
part4 = 0x03,
}test;

test aaa  ;
aaa = 0x00; /*错误,enum常量是part1-part4*/
aaa = (test)0x00; /*enum不能强转*/
uint8 u8_type = aaa; /*类型不一样不能赋值*/
fun1(aaa); /*类型不一样不能赋值*/
(extern int fun1(uint8 x);)
fun2(u8_type);
(extern int fun2(test x);)

如果我们要将enum类型赋值给uint8这样,我们可以通过强制转换

uint8 u8_type = (uint8)aaa;
fun1((uint8)a);

那遇到我们需要将uint8类型或者常量赋值给enum的参数怎么办?有三个解决办法。
①编写一个函数(switch)
②使用一个宏定义
③编写一个函数(for)

①编写一个函数(switch)
test enum_switch(uint8 x){
	switch(x){....}
}
②使用一个宏定义
#define enum_define(x) (((x) == 0x00) ? part1:())
③编写一个函数(for)
test enum_switch(uint8 x){
	for(test = part1;test<=part4;test++)
	{
		if(x == (uint8)test)
			{return test;}	
	}
}

第三种方法会在test++报错,但是可以运行,具体就是enum不被允许++,这可能就和一些编译器一样会支持enum直接做运算(相当于帮你转换了)。

最后,这些方法同样可以用在:

test aaa &= bbb;(test bbb) 

想上面的演示一样,enum不被允许做逻辑预算,这个时候我们依然可以用上面三种方法。

test enum_switch(test x ,test y){
	uint8 a;
	a = (uint8)x;
	a &= (uint8)y;
	switch(a){....}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值