Doesn't the error message mention the name of the struct? You can also probably let the compiler output preprocessed file (-E with GCC).
I'm not much of a macro user, but some experimentation showed that this might work (as I understand the middle macro is needed to get __LINE__ replaced with the number.
Code:
#define CREATE_STRUCT() CREATE_STRUCT_IMP1(__LINE__)
#define CREATE_STRUCT_IMP1(id) CREATE_STRUCT_IMP2(id)
#define CREATE_STRUCT_IMP2(id) struct s##id {}
int main()
{
CREATE_STRUCT() s1;
CREATE_STRUCT() s2;
}
It would be interesting to know indeed, what kind of problem this is supposed to solve.