永发信息网

这个C语言的枚举为什么开头只有一个“enum”而没有枚举名?这样的是什么作用?

答案:6  悬赏:80  手机版
解决时间 2021-04-02 21:11
这个C语言的枚举为什么开头只有一个“enum”而没有枚举名?这样的是什么作用?
最佳答案
这样定义的enum,意思是仅给出了一组常量的定义!
~~~~~~~~
然后在程序中就可以直接使用这些常量符号了,可以赋值、比较判定、用于返回值等等。。。追问那是不是有没有enum这个外层都无所谓?追答绝对不是的!

首先,这几个常量是拥有一个完整逻辑的概念的东西,它们联合起来相对完整地描述一个事情的度量;
其次,需要考虑今后的变更/维护,再次新增一个量的时候,它与已经存在的量需要相互参照的,不能够Conflicit,逻辑层面上应该是一致的;

其实无论如何,哪怕用不着,最好这样子来定义enum:
typedef enum
{
........
PRISM2_SET_ENCRYPTION = 6,

........
} ENUM_TYPE_T;
这样子就产生一个新的Data Type了,可以定义它的变量,变量本身受约束于枚举内容的定义。

供参考。追问那我问的这个根本没有枚举名和变量名,它有什么意义?其他量如何用它呢?(老师让读的程序中有这段)若没意义的话,去掉可以吗?
全部回答
匿名枚举,相当于定义了一系列常量
正好也读到了类似的代码,按我理解是这样的。
没有名字的enum和用define的作用类似,都是定义一组常量。
但是enum的成员可以作为整形常量使用的,而define是预处理的时候直接字符替换。
假设定义一个函数func(int val)。那么在采取无名enum定义时可以这样调用函数func(PRISM2_SET_ENCRYPTION),但是如果采用define方式定义那就不行了。这在定义需要接受一组预定义参数的函数的时候可能比较有用。
一般来说,应该是PRISM2_SET_ENCRYPTION这些都是常量。实际就是给一系列存在某种关联的常量赋值的过程不过最好还是加个enum名最好,不然就不如想上面说的那样直接define定义了追问那是不是有没有enum这个外层都无所谓?追答有啊,如果是一定定义10个或者更多个相关系的,譬如都是一个switch中的case条件。
就要用enum比define要好了追问这个enum根本没有变量,之后如何用它?
没有变量也一样使用。
其实枚举只是定义了一连串的变量的值,如果值连续,你只需要给其中一个赋值就可以了,其他的不用管。有没有枚举名称无所谓的,在C语言中。追问那这种无名枚举有什么作用?不用可以吗?追答用名的枚举相当于告诉你,以下枚举的变量属于哪个种类,比如枚举了星期一到星期日,然后给枚举一个名称星期,这样就告诉你枚举变量的都是星期几。可读性好点而已。不用名称也可以,可读性差点而已。不用枚举,就用#define吧。说到底其实跟define意思差不多,define要每个写值,枚举不用。追问那我问的这个根本没有枚举名和变量名,它有什么意义,去掉可以吗?其他量如何用它呢?(老师让读的程序中有这段)。追答/* PRISM54_HOSTAPD ioctl() cmd: */
enum {
PRISM2_SET_ENCRYPTION = 6,
PRISM2_HOSTAPD_SET_GENERIC_ELEMENT = 12,
PRISM2_HOSTAPD_MLME = 13,
PRISM2_HOSTAPD_SCAN_REQ = 14,
};
int cmd;
cmd = PRISM2_HOSTAPD_SET_GENERIC_ELEMENT;//这样写可以更清楚自己表达的意思。
等价于
cmd = 12;追问但你说的cmd并不是枚举变量啊,,,为什么还可以用到枚举里的呢?
无名枚举应该在定义时定义变量,不然无法引用定义的无名枚举类型了。如
enum {
PRISM2_SET_ENCRYPTION = 6,
PRISM2_HOSTAPD_SET_GENERIC_ELEMENT = 12,
PRISM2_HOSTAPD_MLME = 13,
PRISM2_HOSTAPD_SCAN_REQ = 14,
}PRISM2;
虽然没错,但是可读性较低,该枚举该为以下宏定义更好
#define PRISM2_SET_ENCRYPTION 6
#define PRISM2_HOSTAPD_SET_GENERIC_ELEMENT 12
#define PRISM2_HOSTAPD_MLME 13
#define PRISM2_HOSTAPD_SCAN_REQ 14
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
サヨナラ 什么意思?
古诗,月什么雁飞高,单于夜遁逃
鹧鸪与石鸡有什么区别?
我有一个女儿是单亲家庭现在都29了还和我这个
能帮帮我嘛 我现在想和鬼做一次交易。我愿意
19除以7等于多少 怎么列竖式
求FPS与RPG结合很好的单机游戏,越多越好
东莞联通4g套餐今天超用35m流量要扣去多少钱?
qq里怎么屏蔽非好友的一切消息?
06款沃尔沃s402.4到底速度能跑多快
河南新乡市区内都有哪些好玩的?购物去哪里?
中国汉朝距今有多久了
鲁山县平顶山余堂地母庙(南门)地址有谁知道?
左前方有异响是什么问题
羽绒服大点好还是小点好
推荐资讯
古墓丽影9失落探险家之墓,都按攻略的用灯烧
实习离职三天不给工资,干了二十多天
下载肯定有你没看过的!影迷盘点40部震撼三观
世界十大文豪的代表作
前两天买了包家乐氏可可玉米片,打开后吃了一
塑胶模具工厂有哪些好点的?
南阳地区2018二级维护还交吗
HK4100F-DC6-SHG,6脚继电器如何接线
头七的纸钱谁烧
哪位有关于DINP和DOP的相关标准啊?!!急用
是不是汽车动力越足油耗就越高
抽油烟机对于橱柜是否有要求,之前介于顶吸油
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?