这个C语言的枚举为什么开头只有一个“enum”而没有枚举名?这样的是什么作用?
答案:6 悬赏:80 手机版
解决时间 2021-04-02 21:11
- 提问者网友:暗中人
- 2021-04-02 12:50
这个C语言的枚举为什么开头只有一个“enum”而没有枚举名?这样的是什么作用?
最佳答案
- 五星知识达人网友:渊鱼
- 2021-04-02 13:01
这样定义的enum,意思是仅给出了一组常量的定义!
~~~~~~~~
然后在程序中就可以直接使用这些常量符号了,可以赋值、比较判定、用于返回值等等。。。追问那是不是有没有enum这个外层都无所谓?追答绝对不是的!
首先,这几个常量是拥有一个完整逻辑的概念的东西,它们联合起来相对完整地描述一个事情的度量;
其次,需要考虑今后的变更/维护,再次新增一个量的时候,它与已经存在的量需要相互参照的,不能够Conflicit,逻辑层面上应该是一致的;
其实无论如何,哪怕用不着,最好这样子来定义enum:
typedef enum
{
........
PRISM2_SET_ENCRYPTION = 6,
........
} ENUM_TYPE_T;
这样子就产生一个新的Data Type了,可以定义它的变量,变量本身受约束于枚举内容的定义。
供参考。追问那我问的这个根本没有枚举名和变量名,它有什么意义?其他量如何用它呢?(老师让读的程序中有这段)若没意义的话,去掉可以吗?
~~~~~~~~
然后在程序中就可以直接使用这些常量符号了,可以赋值、比较判定、用于返回值等等。。。追问那是不是有没有enum这个外层都无所谓?追答绝对不是的!
首先,这几个常量是拥有一个完整逻辑的概念的东西,它们联合起来相对完整地描述一个事情的度量;
其次,需要考虑今后的变更/维护,再次新增一个量的时候,它与已经存在的量需要相互参照的,不能够Conflicit,逻辑层面上应该是一致的;
其实无论如何,哪怕用不着,最好这样子来定义enum:
typedef enum
{
........
PRISM2_SET_ENCRYPTION = 6,
........
} ENUM_TYPE_T;
这样子就产生一个新的Data Type了,可以定义它的变量,变量本身受约束于枚举内容的定义。
供参考。追问那我问的这个根本没有枚举名和变量名,它有什么意义?其他量如何用它呢?(老师让读的程序中有这段)若没意义的话,去掉可以吗?
全部回答
- 1楼网友:三千妖杀
- 2021-04-02 14:58
匿名枚举,相当于定义了一系列常量
- 2楼网友:掌灯师
- 2021-04-02 14:24
正好也读到了类似的代码,按我理解是这样的。
没有名字的enum和用define的作用类似,都是定义一组常量。
但是enum的成员可以作为整形常量使用的,而define是预处理的时候直接字符替换。
假设定义一个函数func(int val)。那么在采取无名enum定义时可以这样调用函数func(PRISM2_SET_ENCRYPTION),但是如果采用define方式定义那就不行了。这在定义需要接受一组预定义参数的函数的时候可能比较有用。
没有名字的enum和用define的作用类似,都是定义一组常量。
但是enum的成员可以作为整形常量使用的,而define是预处理的时候直接字符替换。
假设定义一个函数func(int val)。那么在采取无名enum定义时可以这样调用函数func(PRISM2_SET_ENCRYPTION),但是如果采用define方式定义那就不行了。这在定义需要接受一组预定义参数的函数的时候可能比较有用。
- 3楼网友:野慌
- 2021-04-02 14:18
一般来说,应该是PRISM2_SET_ENCRYPTION这些都是常量。实际就是给一系列存在某种关联的常量赋值的过程不过最好还是加个enum名最好,不然就不如想上面说的那样直接define定义了追问那是不是有没有enum这个外层都无所谓?追答有啊,如果是一定定义10个或者更多个相关系的,譬如都是一个switch中的case条件。
就要用enum比define要好了追问这个enum根本没有变量,之后如何用它?
就要用enum比define要好了追问这个enum根本没有变量,之后如何用它?
- 4楼网友:空山清雨
- 2021-04-02 13:41
没有变量也一样使用。
其实枚举只是定义了一连串的变量的值,如果值连续,你只需要给其中一个赋值就可以了,其他的不用管。有没有枚举名称无所谓的,在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并不是枚举变量啊,,,为什么还可以用到枚举里的呢?
其实枚举只是定义了一连串的变量的值,如果值连续,你只需要给其中一个赋值就可以了,其他的不用管。有没有枚举名称无所谓的,在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并不是枚举变量啊,,,为什么还可以用到枚举里的呢?
- 5楼网友:毛毛
- 2021-04-02 13:23
无名枚举应该在定义时定义变量,不然无法引用定义的无名枚举类型了。如
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
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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯