לגבי הדוגמה האחרונה
אני לא יודע מה ההגדרה המדויקת (או אם בכלל יש כזו), אבל ב-C משתמשים בהצהרה כזו אם רוצים להגדיר typedef ל-struct ויש הצהרה קודמת שצריכה את ה-struct דוגמה:
typedef struct name *pname; typedef struct name { ... } name_t;
אם סדר השורות היה הפוך לא היה צורך לתת ל-struct שם