我有以下内容:
typedef enum {
green = 0;
orange = 1;
red = 2;
} color;
typedef enum {
proceed = 0;
prepare = 1;
stop = 2;
} state;
typedef union {
color a;
state b;
uint8_t reserved;
} status;
typedef struct {
u32 m : 8;
u32 n : 8;
status var : 8;
u32 res : 8;
} info;
我在定义结构变量时看到编译错误:
错误:位字段' var'有无效的类型。
我想将结构打包在4个字节内,并将枚举的并集作为位字段。这可能吗?
答案 0 :(得分:2)
位字段的定义仅限于数据类型int
,signed int
,unsigned int
,但union
类型为C89
或{{1}标准。 Bit Field适用于C / C ++,C90
_Bool
类型
答案 1 :(得分:2)
如果您已经了解所需的布局,最好尽可能直接询问。可能类似于:
typedef struct {
uint8_t m;
uint8_t n;
uint8_t var;
uint8_t res;
} info;
如果您想要特定尺寸,请使用显式尺寸的类型。包含enum
类型成员的enum
类型或联合允许(至少)与int
相同的大小,因此您对此特定布局的要求就是规则。