快捷搜索:  汽车  科技

c语言枚举法解题技巧和方法(CC实战027)

c语言枚举法解题技巧和方法(CC实战027)枚举类型(enumeration)是 C 中的一种派生数据类型,它是由用户定义的若干枚举成员的集合。枚举类型的作用域一般是整个文件或者类内,当在整个文件夹时所有枚举成员不能有相同的,当在类内时不同类的枚举成员可以有相同的。以上内容是小编给大家分享的【C/C 实战027:遍历enum枚举类型】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。为了方便学习,下面附上本文用到的源码:

什么是枚举

枚举是C语言中的一种基本数据类型,它可以用来声明一组常数(静态常量)。当一个变量有几个固定的可取值时就可以将其定义为枚举类型。枚举可以将变量值直接列出,使用时变量值只限于列举出的值范围内。很简单的例子就是日历中每周都有固定的7天,那么我们在定义星期的时候就可以用枚举。

c语言枚举法解题技巧和方法(CC实战027)(1)

枚举定义

枚举通过关键词enum来定义枚举类型,在枚举中声明该枚举类型的变量并使用该变量存储枚举元素的数值。基础类型表示该枚举中定义的所有枚举数值,枚举可以声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 等基础类型,如果没有声明基础类型则默认为int类型。枚举成员是该枚举类型的常量,所以枚举成员不能具有相同的变量名。如果枚举成员没有赋值则默认第一个枚举成员值为0,往后的枚举成员值会依次顺序加1。

c语言枚举法解题技巧和方法(CC实战027)(2)

枚举定义系统信息

在获取华中数控设备的系统信息时发现该API函数可以获取到的系统信息相当的多,系统通过定义枚举来区分这些数据。我们要获取这些数据的时候就需要通过指定对应的枚举值来获取对应的信息。为了可以一次性获取系统信息我们需要遍历所有的枚举值,枚举类型的每个元素都是整数,而C 没有提供枚举类型的迭代器也不能在操作后直接赋新值给原对象(枚举没有操作符 ),所以没法像数组那样直接遍历。

c语言枚举法解题技巧和方法(CC实战027)(3)

遍历枚举

那么我们要怎么才能实现枚举的遍历呢?这里我们需要用到强制类型转换,这样遍历在结束后就可以获取到下一个枚举成员了。遍历范围可以通过定义枚举成员变量来限制,这里最后一个枚举成员为HNC_SYS_TOTAL。这里主要是获取的值类型不同SDK提供了不同的API接口,下面将部分判断省略了:

c语言枚举法解题技巧和方法(CC实战027)(4)

总结

枚举类型(enumeration)是 C 中的一种派生数据类型,它是由用户定义的若干枚举成员的集合。枚举类型的作用域一般是整个文件或者类内,当在整个文件夹时所有枚举成员不能有相同的,当在类内时不同类的枚举成员可以有相同的。以上内容是小编给大家分享的【C/C 实战027:遍历enum枚举类型】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

为了方便学习,下面附上本文用到的源码:

//enum语法结构 访问修辞符 enum 枚举名:基础类型 { 枚举成员 MON = 1 , //变量名 = 变量值 ... }; ------------------------------------------- enum WeekDay { MON TUE WED THU FRI SAT SUN } -------------------或者-------------------- enum WeekDay { SUN = 7 MON = 1 TUE WED THU FRI SAT } ---------------------------------------------- enum HncSystem { HNC_SYS_CHAN_NUM = 0 /*!< 获取系统通道数 {Get(Bit32)} */ HNC_SYS_PLC_ONLINE /*!< PLC在线调试 {Get(Bit8[48]) Set(Bit8[48])} */ HNC_SYS_TOTAL }; enum HncSystem s; Bit32 ret ret1; Bit32 intValue; Bit8 strValue[48]; for (s = HNC_SYS_CHAN_NUM; s <= HNC_SYS_TOTAL; s = (HncSystem)(s 1)){ switch (s) { case HNC_SYS_CHAN_NUM: /*!< 获取系统通道数 {Get(Bit32)} */ case HNC_SYS_MOVE_UNIT: /*!< 长度分辨率 {Get(Bit32)} */ case HNC_SYS_TURN_UNIT: /*!< 角度分辨率 {Get(Bit32)} */ ret = handle->HNC_SystemGetValue(s intValue); break; case HNC_SYS_NCK_VER: /*!< NCK版本 {Get(Bit8[32])} */ case HNC_SYS_DRV_VER: /*!< DRV版本 {Get(Bit8[32])} */ case HNC_SYS_PLC_VER: /*!< PLC版本 {Get(Bit8[32])} */ ret1=handle->HNC_SystemGetValue(s strValue); break; default: break;

猜您喜欢: