The #
and ##
preprocessor operators are available in C++ and ANSI/ISO C. The #
operator causes a replacement-text token to be converted to a string surrounded by quotes. Consider the following macro definition:
#define HELLO( x ) cout << "Hello, " #x << endl;
When HELLO(John)
appears in a program file, it is expanded to
cout << "Hello, " "John" << endl;
The string "John"
replaces #x
in the replacement text. Strings separated by white space are concatenated during preprocessing, so the above statement is equivalent to
cout << "Hello, John" << endl;
Note that the #
operator must be used in a macro with arguments, because the operand of #
refers to an argument of the macro.
The ##
operator concatenates two tokens. Consider the following macro definition:
cout << "Hello, John" << endl;
#define TOKENCONCAT( x, y ) x ## y
When TOKENCONCAT
appears in the program, its arguments are concatenated and used to replace the macro. For example, TOKENCONCAT(O, K)
is replaced by OK
in the program. The ##
operator must have two operands.