我已经使用位域这样的结构,
struct
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
现在我想看看这是否可以为联合完成,所以我修改了代码一样,
union
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
我发现与工会工作的位字段,但在联盟所有这些领域都给予单个位,因为我从输出的理解。 现在我看到它是不是错误使用位字段与工会,但在我看来,使用它像这样不正确的操作上。 所以,答案是什么 - 它是有效使用位域与工会?
给你一个枪和子弹。 是否接受这个拍你的自我足? 当然不是,但没有人可以这样做,如果你想阻止你。
我的观点是,就像枪和子弹,工会和位字段的工具,他们有他们的目的,用途和“滥用”。 因此,使用位域工会,正如你上面写的,是完全合法的C,但毫无用处的代码。 所有联盟共享相同的内存里面,这样所有的位域你提到的领域基本上是相同的标志,因为它们共享相同的内存。
它是有效的,但是当你发现了,没有用的,你做它的方式出现。
你可能会做这样的事情,所以你可以将所有在同一时间使用标志位。
union {
struct {
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
};
unsigned int flags;
};
或者你可以做这样的事情:
union {
struct {
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
};
struct {
unsigned int is_ready: 1;
unsigned int is_done: 1;
unsigned int is_waiting: 1;
};
};