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

/* PRISM54_HOSTAPD ioctl() cmd: */
enum {
PRISM2_SET_ENCRYPTION = 6,
PRISM2_HOSTAPD_SET_GENERIC_ELEMENT = 12,
PRISM2_HOSTAPD_MLME = 13,
PRISM2_HOSTAPD_SCAN_REQ = 14,
};

这种枚举有什么作用?

这样定义的enum,意思是仅给出了一组常量的定义!
~~~~~~~~
然后在程序中就可以直接使用这些常量符号了,可以赋值、比较判定、用于返回值等等。。。追问

那是不是有没有enum这个外层都无所谓?

追答

绝对不是的!

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

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

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

供参考。

追问

那我问的这个根本没有枚举名和变量名,它有什么意义?其他量如何用它呢?(老师让读的程序中有这段)若没意义的话,去掉可以吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-12
正好也读到了类似的代码,按我理解是这样的。
没有名字的enum和用define的作用类似,都是定义一组常量。
但是enum的成员可以作为整形常量使用的,而define是预处理的时候直接字符替换。
假设定义一个函数func(int val)。那么在采取无名enum定义时可以这样调用函数func(PRISM2_SET_ENCRYPTION),但是如果采用define方式定义那就不行了。这在定义需要接受一组预定义参数的函数的时候可能比较有用。
第2个回答  2013-03-10
没有变量也一样使用。

其实枚举只是定义了一连串的变量的值,如果值连续,你只需要给其中一个赋值就可以了,其他的不用管。有没有枚举名称无所谓的,在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并不是枚举变量啊,,,为什么还可以用到枚举里的呢?

第3个回答  2013-03-11
一般来说,应该是PRISM2_SET_ENCRYPTION这些都是常量。实际就是给一系列存在某种关联的常量赋值的过程不过最好还是加个enum名最好,不然就不如想上面说的那样直接define定义了追问

那是不是有没有enum这个外层都无所谓?

追答

有啊,如果是一定定义10个或者更多个相关系的,譬如都是一个switch中的case条件。
就要用enum比define要好了

追问

这个enum根本没有变量,之后如何用它?

第4个回答  2013-03-11
匿名枚举,相当于定义了一系列常量
相似回答