假设我有一个定义如下的结构:
struct entity {
int x;
int y;
};
以及将它用作成员的结构:
struct player {
struct entity position;
char* name;
};
如果我编写以下代码,则会出现错误:
struct player p;
p.x = 0; //error: 'struct player' has no member named 'x'
到目前为止,我一直在编写一个函数,该函数采用播放器结构并通过执行 return player.position.x
返回值。
是否有编译器标志或其他方法允许我“展平”(我不确定这是否是正确的短语)结构并允许我像上面显示的那样访问 x 变量?我意识到如果在播放器和实体中也有一个名为 x 的整数,这可能是不明确的。
请注意,我将在多个结构中使用 entity 结构,因此我不能在 player 中使用匿名结构。
最佳答案
简而言之,答案是“否”。如果您查看过诸如 What are anonymous structs and unions useful for in C11 之类的问题,则尤其如此。并发现它们不是解决方案。
可以看看C11 §6.7.2.1 Structure and union specifiers有关一般结构和 union 类型的更多信息(以及 ¶13 专门用于有关匿名成员的更多信息,以及 ¶19 的示例)。我同意它们不是您所追求的;它们涉及一个新定义的类型,没有标签,也没有“声明符列表”。
关于c - 在不引用内部结构的情况下访问另一个结构中的结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808342/