这很奇怪。我还没有读过任何在 C 中允许在另一个结构定义中定义结构的地方。但是这个链接说它是允许的。
http://www.c4learn.com/structure-within-structure-nested.html
这是真的?
这很奇怪。我还没有读过任何在 C 中允许在另一个结构定义中定义结构的地方。但是这个链接说它是允许的。
http://www.c4learn.com/structure-within-structure-nested.html
这是真的?
是的,您可以声明嵌套结构。这是语法:
C11 (n1570), § 6.7.2.1 结构和联合说明符
struct-or-union-specifier: struct-or-union identifier (opt) { struct-declaration-list } struct-or-union identifier struct-declaration-list: struct-declaration struct-declaration-list struct-declaration
开始!我们必须更深入!!
struct EvenDeeper {
int a, b, c;
struct {
char a;
} u;
};
struct Inner {
struct EvenDeeper e;
};
struct Outer {
struct Inner i;
};
int main(int argc, char *argv[]) {
struct Outer o;
o.i.e.a = 5;
o.i.e.b = 4;
o.i.e.c = 3;
o.i.e.u.a = '?';
printf("%d:%d:%d:%c", o.i.e.a, o.i.e.b, o.i.e.c, o.i.e.u.a);
return 0;
}
使用“gcc -std=c89”正确编译,输出:
5:4:3:?
§6.7.2.1中定义的结构结构
是的,您可以在另一个结构中声明一个结构。
我看到的两个缺点是:
1. 可读性:它可能会使您的代码难以被其他人阅读,尤其是在团队项目中时。
2.内部结构的作用域仅限于外部结构,更不用说(取决于它的定义方式),它只能使用一次,重复使用相同的结构将需要重新定义它。
希望这可以帮助。