给定这个简单的C代码:
struct {
struct a {
int foo;
};
struct b {
char *bar;
};
} s;
例如,我想知道是否有比
s.a.foo = 5
更紧凑的方式访问嵌套结构中的变量。 最佳答案
首先,请注意,您的示例不是标准的C89(但是当您要求一些语言扩展时,某些编译器可以接受它)。使用GCC时,需要使用-fms-extensions
标记将接受的C dialect扩展到编译器)。您正在使用unnamed fields。一种更标准的编码方式是:
struct a {
int foo;
};
struct b {
char* bar;
};
struct {
struct a aa;
struct b bb;
} s;
回到你的问题上,不,没有别的办法了。但是,您可以使用预处理器宏,这可能会有所帮助。例如,假设上面的声明,您可以
#define afoo aa.foo
#define bbar bb.bar
然后你可以编码
s.afoo
而不是s.aa.foo
您还可以定义如下宏
#define AFOO(X) (X).aa.foo
然后编码
AFOO(s)
使用这样的预处理器宏确实有些麻烦:在我的示例中,您不能再声明一个名为
afoo
的变量(或形式参数、字段或函数)但我不确定你是否该费心。我个人的建议和习惯是给字段赋予更长且通常是唯一的名称(也给我的名称命名)。利用编辑器的自动完成功能。别忘了你的代码读起来比写起来更频繁,所以在代码中使用有意义的名字。