Избегание предупреждений «переопределения typedef» при определении структур

Я определяю некоторые структуры, которые ссылаются друг на друга, и набирает структуры перед их использованием, поэтому каждая структура «знает» других (получала ошибки компиляции без этого). Не уверен, что это необходимо или правильно.

Теперь, когда компилируется с gcc, я получаю предупреждения «redefinition of typedef». Каков правильный способ этого?

typedef struct a A; typedef struct b B; typedef struct c C; struct a { B* list; A* parent; }; struct b { A* current; B* next; }; struct c { A* current; A* root; }; 

UPDATE: Dumb, bad copy-in paste привело к тому, что этот заголовок был включен дважды в другой файл. Я новичок в C и думал, что это должно быть связано с тем, что структуры в файле дважды. Спасибо @ Кевин Баллард за головы.

Это хороший пример того, зачем нужны защитные устройства header / include:

 #ifndef MY_HEADER_FILE #define MY_HEADER_FILE typedef struct a A; typedef struct b B; /* ... */ #endif 

В вашем коде нет ошибки, которую я вижу теперь, когда вы добавили полуколоны. Вы также можете просто форматировать объявления типа:

 struct b; struct c; typedef struct a { struct b* list; struct a* parent; } A; typedef struct b { A* current; struct b* next; } B; typedef struct c { A* current; A* root; } C; 

Твой путь в порядке, избегайте набирать struct несколько раз.