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 un-expanded 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 token-pasting operator:
#define BIT_FIELD(type, n) type field##n:n
// …
struct A
{
BIT_FIELD(unsigned,5); // will be replaced with: unsigned field5:5;
BIT_FIELD(unsigned,7); // will be replaced with: unsigned field7:7;
};