So not to overstate the obvious, when somebody asks a simple, basic
question, wouldnt it be nice to just reply with an answer ...
OK: the answer is, it is quite literally impossible to do what you
asked for.
You seem to hate the idea that someone might quote parts of the
standards to you, but here is the part that, in effect, says "you
cannot have a #define create a new #define":
[#1] After all parameters in the replacement list have been
substituted and # and ## processing has taken place, all
placemarker preprocessing tokens are removed, then the
resulting preprocessing token sequence is rescanned with all
subsequent preprocessing tokens of the source file for more
macro names to replace.
[#2] If the name of the macro being replaced is found during
this scan of the replacement list (not including the rest of
the source file's preprocessing tokens), it is not replaced.
Further, if any nested replacements encounter the name of
the macro being replaced, it is not replaced. These
nonreplaced macro name preprocessing tokens are no longer
available for further replacement even if they are later
(re)examined in contexts in which that macro name
preprocessing token would otherwise have been replaced.
[#3] The resulting completely macro-replaced preprocessing
token sequence is not processed as a preprocessing directive
*even if it resembles one* ... [emphasis mine]
That last clause means that no matter how you trick a C compiler
into taking:
#define THIS(x) \
<whatever replacement text you like, including a "#" and "define">
so that the result includes the sequence:
#define THAT(x) (*x)
this resulting "#define" will not be acted-upon.
You have to give up on this approach. There are others, though.
Re-read Eric Sosman's replies, and you will find a simpler method
that works just fine for what you *really* wanted to do. Or, if
you want to write unnecessary code (instead of using the simpler
method he suggested), write your own "pre-preprocessor" and run
your code through that before running it through a C compiler.