嗨,我在 C 中定义了以下结构
struct __attribute__((__packed__)) Input {
enum {
I_PE_left = 0,
I_PE_up = 1,
I_PE_right = 2,
I_PE_down = 3,
I_LSU_left = 4,
I_LSU_up = 5,
I_LSU_right = 6,
I_LSU_down = 7,
I_LR_0 = 8,
I_LR_1 = 9,
I_LR_2 = 10,
I_IMMI_0 = 11,
I_IMMI_1 = 12,
I_IMMI_2 = 13,
I_UNUSE = 15
} src:4;
};
struct __attribute__((__packed__)) Instr {
struct Input inputx;
struct Input inputy;
struct Input inputz;
struct Input inputzz;
};
在上面的例子中,
sizeof(struct Instr)
是 4,这意味着即使是打包的结构也至少需要 1 个字节。
但是,我想将
sizeof(struct Instr)
推入 2 但不知道该怎么做..
您不需要将
enum
嵌入到单独的 struct
中。直接使用它,将枚举本身作为位域:
enum Input {
I_PE_left = 0,
I_PE_up = 1,
I_PE_right = 2,
I_PE_down = 3,
I_LSU_left = 4,
I_LSU_up = 5,
I_LSU_right = 6,
I_LSU_down = 7,
I_LR_0 = 8,
I_LR_1 = 9,
I_LR_2 = 10,
I_IMMI_0 = 11,
I_IMMI_1 = 12,
I_IMMI_2 = 13,
I_UNUSE = 15
};
struct Instr {
enum Input inputx:4;
enum Input inputy:4;
enum Input inputz:4;
enum Input inputzz:4;
};
然后用
-fshort-enums
编译,这将使enum
类型只占用1个字节。这将为您提供一个 2 字节的结构,而无需打包它。