Вы должны начать с установки блокировки включения во все ваши файлы .h (это называется include guard ):
#ifndef ONE_H
#define ONE_H
//rest of header
#endif //ONE_H
Таким образом, вы можете включить его несколько раз.
Второе:
typedef struct my1 { int a; .. .. }my_t;
Вам нужен typedef в C (не в C ++)
Заголовки включены в порядке включения.
Если вы компилируете файл abc.c, который начинается с:
#include "a.h"
#include "b.h"
тогда сначала будет включен a.h, затем b.h.
Вы можете думать об этом, как будто вы вставляете код в файл. Включено в этот момент.