#define struct union and #define else still compiles any C program?

c, c-preprocessor, language-lawyer, struct, unions

Solution

I managed to find a counterexample (C99):

for (int i = 0; i < 5; ++i)
    if (i > 2)
        do_smth();
    else if (i < 4)
        do_smth_else();

This one doesn't compile because if you `#define else` the variable `i` goes out of scope. But that doesn't involve the `#define struct union` thing. Any other ideas?

Problem

Someone claimed in a presentation that if you add ``` #define struct union #define else ``` at the beginning of any valid C program, that program would still compile. That seems like a bold claim. Any counterexample you have in mind and prove that guy wrong?

Original source

Related problems