最初に 1 つのステートメントで typedef を定義し、構造体を前方宣言してから、後続の定義で構造体を定義できます。
typedef struct A A;
struct A
{
int a;
int b;
A* next;
};
編集:他の人が言及したように、前方宣言がなくても、構造体名は構造体定義内で有効です(つまり、 struct A
を使用できます) )、しかし、typedef 定義が完了するまで、typedef は使用できません (したがって、A
だけを使用します) 有効ではありません)。ポインター メンバーが 1 つだけの場合、これはあまり問題にならないかもしれませんが、多数の自己型ポインターを含む複雑なデータ構造がある場合は、扱いにくいかもしれません。
最初の回答に加えて、typedef および forward 宣言がなくても、これでも問題ありません。
struct A
{
int a;
int b;
struct A *next;
};
struct
がありません A*
の前
typedef struct A {
int a;
int b;
struct A* next;
} A;