我有这两种结构: - 1.
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
Run Code Online (Sandbox Code Playgroud)
这个结构有匿名联合,当我计算这个结构的大小时 - 它出来是12个字节(4 + 4 + 4).这可以.
2.
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union u
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
Run Code Online (Sandbox Code Playgroud)
但我在32位机器上的DevC++编译器为这个结构的大小打印了8个字节.我不明白为什么它会出现8.
您的第一个示例声明了一个匿名结构union.
第二个例子声明了一个包含声明的结构union,这是一个noop.例如
typedef struct bitfield
{
unsigned int a:16;
unsigned int b:17;
union u
{
unsigned int c:4;
unsigned int d:32;
};
}bfield;
int main(void) {
struct bitfield b;
b.c=2;
}
Run Code Online (Sandbox Code Playgroud)
会失败的
x.c:14:4: error: 'struct bitfield' has no member named 'c'
Run Code Online (Sandbox Code Playgroud)
编译器可能会警告它
x.c:9:6: warning: declaration does not declare anything
Run Code Online (Sandbox Code Playgroud)
所以,你的问题与bitfields没什么关系,但与匿名联盟.