在 C 中跨匿名结构合并位字段
merge bit fields across anonymous structs in C
我有以下代码:
typedef unsigned short u16;
struct S {
struct {
u16 a: 9;
u16 b: 1;
u16 c: 1;
u16 d: 1;
} __attribute__((packed));
u16 e: 4;
} __attribute__((packed));
当我检查 sizeof(S)
时,它 returns 3. 是否有可能以某种方式指示 gcc 跨匿名结构合并位域,以便 sizeof(S)
returns 2.
您要查找的结果可以通过将结构 union
改为两个 bit-fields 重叠来获得。第一个位域“使用”的位将在第二个位域中标记为“保留”:
union S {
struct {
u16 a: 9;
u16 b: 1;
u16 c: 1;
u16 d: 1;
} ;
struct {
u16 reserved: 12; // Number of bits used in the first struct
u16 e: 4;
};
};
我有以下代码:
typedef unsigned short u16;
struct S {
struct {
u16 a: 9;
u16 b: 1;
u16 c: 1;
u16 d: 1;
} __attribute__((packed));
u16 e: 4;
} __attribute__((packed));
当我检查 sizeof(S)
时,它 returns 3. 是否有可能以某种方式指示 gcc 跨匿名结构合并位域,以便 sizeof(S)
returns 2.
您要查找的结果可以通过将结构 union
改为两个 bit-fields 重叠来获得。第一个位域“使用”的位将在第二个位域中标记为“保留”:
union S {
struct {
u16 a: 9;
u16 b: 1;
u16 c: 1;
u16 d: 1;
} ;
struct {
u16 reserved: 12; // Number of bits used in the first struct
u16 e: 4;
};
};