I can only contribute the observation that the "struct" in global.h is the very first token to be compiled in sprintf.c. Before it there are only comments, #if's, #ifdef's, #endif's and #define's which shouldn't produce a token. So it's odd that the compiler complains about a parse error before the first token. Maybe the output from the cpp pass could provide a clue.