我可以看到怎么样
union {
uint32_t ip_address
struct {
uint8_t oct1;
uint8_t oct2;
uint8_t oct3;
uint8_t oct4;
};
};
Run Code Online (Sandbox Code Playgroud)
可能对某人有用,但结构示例中的结构: MS警告C4201的细节似乎有点奇怪.谁能证明一个好的用例?
Bla*_*iev 12
一个无名的union内部struct有意义,因为它允许您引用联合的成员而不指定其名称,因此更短的代码:
struct {
int a;
union {
int b, c, d;
};
} foo;
Run Code Online (Sandbox Code Playgroud)
所以访问它的成员union就像访问包含结构的成员:foo.a和foo.b.否则,您必须使用foo.union_name.b访问联合的成员.
当然,"用户"程序员使用这样的结构应该知道,设置foo.c影响的数值foo.b和foo.d.
出于同样的原因,可以进行相反的操作,即将匿名struct放入union:
union {
struct {
int a, b;
};
int c;
} foo;
Run Code Online (Sandbox Code Playgroud)
这种方式foo.a并foo.b可以同时使用,并foo.c可以在其他情况下使用.
我想不出匿名结构或联合的任何其他用途."声明"一个匿名的结构/联合是一个矛盾,就像说int;而不是int a;.
这主要是因为struct和union非常相似.通常,只有在联合中使用匿名结构和结构中的匿名联合才有用,但在联盟内的结构或联合内嵌套结构大致相当于直接列出其成员.
请注意,不应使用联合来转换值,因为绝对没有布局保证.
| 归档时间: |
|
| 查看次数: |
3975 次 |
| 最近记录: |