有没有办法获得指向匿名结构的指针?没有匿名结构,我可以编写以下代码:
struct a{
int z;
};
struct b{
int y;
struct a *x;
}
这很好用,但是我只在struct a
中使用struct b
,并且用它污染全局名称空间似乎是多余的。有没有一种方法可以定义指向匿名结构的指针(x
)。可能类似于以下内容:
struct b{
int y;
struct {
int z;
} *x;
}
这是否有效?
答案 0 :(得分:7)
是的,您可以这样做。但是有一个麻烦:无法直接声明另一个指向相同类型的指针或该类型的对象,因为...结构类型是匿名的。
但是,仍然可以使用malloc
为它分配内存,因为可以从void *
到任何指向对象的指针进行转换,而无需显式强制转换:
struct b {
int y;
struct {
int z;
} *x;
} y;
y.x = malloc(sizeof *y.x * 5);
为什么您认为这比污染名称空间更好呢?
GCC提供了typeof
,因此您可以通过类似的方法来增加精神错乱
typeof(y.x) foo;
甚至声明该类型的结构
struct b y;
typeof(y.x[0]) foo;
foo.z = 42;
y.x = &foo;