【发布时间】:2011-09-10 08:27:30
【问题描述】:
typedef struct foo_s {
int a;
} foo;
typedef struct bar_s {
foo;
int b;
} bar;
基本上我想做:
bar b;
b.a;
我知道如果我在 bar 中命名了 foo 结构,我可以做 b.foo_name.a,但我不想这样做。
有什么办法吗?
这个问题得到了各种不同的答案,所以让我解释一下需求。我想这样做的原因是因为我有一个需要适应我的情况的库,这意味着我无法修改原始结构 decleration。此外,我需要做的就是在结构的开头添加 1 个项目(为什么是开头?因为我有一个“对象”结构,它负责项目中的所有结构)。我可以像你提到的那样简单地嵌入结构,但它真的很烦人,因为所有引用都需要输入'variable->image.location'那个'image'。键入十亿种类型真的很烦人。
【问题讨论】:
-
一些编译器正好提供这种行为作为扩展。就我个人而言,我认为它提供了太大的风险(嵌套
structs 六层深,忘记了你用过的名字)所以我只命名第一个成员_- 简短、一致、不碍事,而且不是很不方便. (该名称实际上可能由标准和/或编译器保留,但我怀疑是否有人会使用它。) -
如果
image打字很烦人,请使用img。使用查找和替换来为您完成。别担心——无论你最终要做什么,你都会活下来。 -
@chacham15 伙计,避免将 C 问题标记为 C++。这两种是完全不同的语言。
-
是的,我很快删除了标签
-
结构名称不需要使用
foo_s。typedef struct foo { ... } foo;工作正常。