0

次のコードは、コンパイル エラーを生成しています。これが機能しない理由がわかりません。なぜこれが当てはまるのか、誰でも説明できますか。

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

1 に答える 1

6

構造体型は、その定義が終端の で完了するまで不完全}です。最初の例には、ネストされた構造の無限再帰がありますが、これはおそらくあなたが望むものではありません。2 番目の例には、構造体へのポインターが含まれているだけですが、これで問題ありません。

仕様から、6.7.2.1 Structure and union specifiers、段落 3:

構造体または共用体には、不完全型または関数型のメンバーを含めてはなりません (したがって、構造体にはそれ自体のインスタンスを含めてはなりませんが、それ自体のインスタンスへのポインターを含めることができます)。

于 2013-10-17T06:02:47.960 に答える