为什么我们不能将结构对象作为结构内的数据成员?



以下代码正在生成编译错误。我不明白为什么这不起作用,谁能解释为什么会这样。

struct abc {
    int a;
    int b;
    struct abc var;
} a1;
int main()
{
    printf("%d",a1.a);
    return 0;
}

上面的代码不起作用并返回错误:error: field 'var' has incomplete type.

struct abc
{
    int a;
    int b;
    struct abc *var;
} a1;
int main()
{
    printf("%d",a1.a);
    return 0;
}

结构类型在用终止}完成定义之前是不完整的。 您的第一个示例将具有嵌套结构的无限递归,这可能不是您想要的。 第二个示例仅包含指向结构的指针,这很好。

根据规范,6.7.2.1 结构和联合说明符,第3段:

结构或

联合不得包含不完整或函数类型的成员(因此,结构不应包含自身的实例,但可以包含指向自身实例的指针),

最新更新