我发现一个代码实现为下面显示的类似演示..
struct st
{
int a;
struct
{
int b;
};
};
Run Code Online (Sandbox Code Playgroud)
6.58内未命名的struct/union
字段structs/unions
在允许的情况下ISO C11
.
但它有什么好处呢?
因为无论如何我可以以相同的方式访问数据成员
int main()
{
struct st s;
s.a=11;
s.b=22;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc 4.5.2上编译,用
gcc -Wall demo.c -o demo
Run Code Online (Sandbox Code Playgroud)
并没有错误,
Pas*_*uoq 13
它不一定是结构中的匿名结构,我觉得它不是很有用:这通常只会通过引入更多填充来稍微改变布局,而没有其他可见的效果(与将子结构的成员内联到父结构).
我认为匿名结构/联合的优势在于其他地方:它们可以用于将一个匿名结构放在一个结构内部的联合或匿名联合中.
例:
union u
{
int i;
struct { char b1; char b2; char b3; char b4; };
};
Run Code Online (Sandbox Code Playgroud)
unw*_*ind 11
好处很明显,不是吗?它可以避免程序员提出一个名字!由于命名事情很难,如果没有实际需要,可以避免这样做.
这也是一个非常明确的信号,这struct
是本地的,并且从未在其他任何地方使用,但在父结构中作为字段的上下文中,这是非常非常好的信息,因为它减少了不必要耦合的可能性.
把它想象成static
; 它struct
以类似于(但当然不等同于)的方式static
限制内部到外部的可见性,如何限制全局符号对它们出现的编译单元的可见性.