c - 在不引用内部结构的情况下访问另一个结构中的结构字段

标签 c struct

假设我有一个定义如下的结构:

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/

相关文章:

c - "nested"#includes 如何在 C 中工作?

arrays - 使用指针交换数组

c++ - 将带有函数指针数组的结构复制到设备

C - 如何在 C 中使用结构体获取时间

c - 返回到 C 中 for 循环的开头

c++ - 为什么需要模运算符?

c++ - 如何编写C .so 库来替代现有的C++ .so 库?

c++ - 是否有帮助使用私有(private)结构的功能

c - 为什么在我的程序开始时删除 static 会出现 ' Stack overflow' 错误?

c - C中的指针问题