ami*_*n__ 10 c structure unions bit-fields
我使用了具有这样结构的位字段,
struct
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
Run Code Online (Sandbox Code Playgroud)
现在我想知道是否可以通过联合完成这样我修改代码,如,
union
{
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
} flags;
Run Code Online (Sandbox Code Playgroud)
我找到了带有union的bit字段,但是从输出中可以理解,union中的所有字段都被赋予了一个位.现在我看到使用带有union的位字段并不是错误的,但在我看来,像这样使用它在操作上是不正确的.那么答案是什么 - 将bit字段与union结合使用是否有效?
Spa*_*key 20
这是有效的,但正如你所发现的那样,你在那里做的方式没有用.
你可能会这样做,所以你可以使用标志同时重置所有位.
union {
struct {
unsigned int is_static: 1;
unsigned int is_extern: 1;
unsigned int is_auto: 1;
};
unsigned int flags;
};
Run Code Online (Sandbox Code Playgroud)
或者您可能会这样做:
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;
};
};
Run Code Online (Sandbox Code Playgroud)
bin*_*inW 17
给你一把枪和子弹.用脚射击自己可以吗?当然不是,但如果你愿意,没有人可以阻止你这样做.
我的观点是,就像枪支和子弹一样,联合和位域是工具,它们的目的,用途和"滥用".因此,如上所述,使用联合中的位域是完全有效的C,但却是无用的代码.union中的所有字段共享相同的内存,因此您提到的所有位域基本上都是相同的标志,因为它们共享相同的内存.