I really don't know what your question is, but maybe you have problems with your expected output...
Be aware that #define
is a "simple" text-replacement that is running before your code compiles.
This text-replacement has no respect for scope or syntactic correctnes.. it just replaces anything that matches with what you said it.
In your case it would not really make a square of the result of "a++", instead it would
generate this code: b1 = a++ * a++;
If you look here: Question about C programming you can see some explanations as why "a++ * a++" is officially undefined behaviour.