既存のtypedef構造体内にtypedef構造体を定義するプログラムがありますが、なぜコンパイルエラーが発生するのか疑問に思っています。
プログラムは次のとおりです。
typedef struct Outer
{
typedef struct Inner
{
int b;
}INNER;
INNER inner;
int a;
}OUTER;
int main()
{
OUTER obj;
obj.a = 10;
obj.inner.b=8;
return 0;
}
コンパイル時に次のエラーが発生します::
test.c:3:5: error:expected specifier-qualifier-list before ‘typedef’
test.c: In function ‘main’:
test.c:17:5: error: ‘OUTER’ has no member named ‘a’
test.c:18:5: error: ‘OUTER’ has no member named ‘inner’
しかし、私がプログラムを変更したとき
typedef struct Outer
{
struct Inner
{
int b;
};
struct Inner inner;
int a;
}OUTER;
int main()
{
OUTER obj;
obj.a = 10;
obj.inner.b=8;
return 0;
}
正常にコンパイルされます。
typedefが内部構造で許可されていないのはなぜですか?