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

时间:2013-10-17 06:01:24

标签: c

以下代码生成编译错误。 我不明白为什么这不起作用,任何人都可以解释为什么会这样。

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;
}

1 个答案:

答案 0 :(得分:6)

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

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

  

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