是否允许在c中允许其他结构内的结构定义?

时间:2013-07-18 15:29:32

标签: c struct

这很奇怪。我没有读过在C中允许的另一个结构定义中定义结构的任何地方。但是这个链接说明了它的允许。

http://www.c4learn.com/structure-within-structure-nested.html

这是真的吗?

3 个答案:

答案 0 :(得分:2)

是的,您可以声明嵌套结构。这是语法:

  

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

答案 1 :(得分:2)

启!我们必须更深入!!

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

中定义的结构结构

答案 2 :(得分:1)

是的,您可以在另一个结构中声明一个结构。
我看到的两个缺点是:
1.可读性:它可能使您的代码很难让其他人阅读,特别是如果它在团队项目中。
2.内部结构的范围仅限于外部结构,更不用说(取决于它的定义),它只能使用一次,重复使用相同的结构将需要再次重新定义它。

希望这会有所帮助。