以下代码生成编译错误。 我不明白为什么这不起作用,任何人都可以解释为什么会这样。
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;
}
答案 0 :(得分:6)
结构类型在使用终止}
完成定义之前是不完整的。您的第一个示例将具有嵌套结构的无限递归,这可能不是您想要的。第二个例子只包含一个指向结构的指针,这很好。
根据规范, 6.7.2.1结构和联合说明符,第3段:
结构或联合不应包含具有不完整或函数类型的成员(因此,结构不应包含其自身的实例,但可能包含指向其自身实例的指针),