Token-Pasting Operator (##)
The
double-number-sign or “token-pasting” operator (##), which is
sometimes called the “merging” operator, is used in both object-like and
function-like macros. It permits separate tokens to be joined into a single
token and therefore cannot be the first or last token in the macro
definition.
If a formal
parameter in a macro definition is preceded or followed by the token-pasting
operator, the formal parameter is immediately replaced by the unexpanded
actual argument. Macro expansion is not performed on the argument prior to
replacement.
Then, each
occurrence of the token-pasting operator in token-string is removed,
and the tokens preceding and following it are concatenated. The resulting
token must be a valid token. If it is, the token is scanned for possible
replacement if it represents a macro name. The identifier represents the
name by which the concatenated tokens will be known in the program before
replacement. Each token represents a token defined elsewhere, either within
the program or on the compiler command line. White space preceding or
following the operator is optional.
This example
illustrates use of both the stringizing and token-pasting operators in
specifying program output:
#define paster( n ) printf( "token" #n " = %d", token##n )
int token9 = 9;
If a macro is
called with a numeric argument like
paster( 9 );
the macro
yields
printf( "token" "9" " = %d", token9 );
which becomes
printf( "token9 = %d", token9 );
|