client.h: order of inclusions #include "cl_aliencont.h" // prototypes for functions in cl_aliencont.c [...] #include "cl_aircraft.h" // struct aircraft_t is defined here somewhere in cl_aircraft.c: #include client.h void blach (void) { aircraft_t *aircraft; [...] MY_Function(aircraft); } // I cannot use void MY_Function(aircraft_t *pointer) here because cl_aliencont.{c|h} // does not know aircraft_t struct because of order of headers inclusion somewhere in cl_aliencont.h: void MY_Function(void *pointer); somewhere in cl_aliencont.c: #include "client.h" void MY_Function (void *pointer) { aircraft_t aircraft = (aircraft_t *)pointer; }