>>571
"they must be declared exactly once"
"the header that defines the typedef must be included before the header that uses it"

A.h で struct A だけが宣言されていて、使う側で毎度 struct A と書く場合、
使う側で A.h をインクルードせずに struct A の前方宣言で済ませることができる。

A.h で struct A の宣言に加えて typedef struct A A があり、関連する関数の宣言に
struct A* ではなく A* が現れる場合、 A* を使うためには必ず A.h のインクルードが
必要になる。

問題が3つだとしたら2つは残ってるように見える。
何か誤解されてるんじゃなかろうか?