Creating C macro with ## and __LINE__ (token concatenation with positioning macro) - Stack Overflow
The problem is that when you have a macro replacement, the preprocessor will only expand the macros recursively if neither the stringizing operator # nor the token-pasting operator ## are applied to it. So, you have to use some extra layers of indirection...