以下代码正在生成编译错误。我不明白为什么这不起作用,谁能解释为什么会这样。
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段:
结构或联合不得包含不完整或函数类型的成员(因此,结构不应包含自身的实例,但可以包含指向自身实例的指针),