Name
# operator and directive — Stringify operator and null directive
Synopsis
# // Null directive
# identifier
A preprocessor directive with no directive name is called a null directive . It has no effect.
The # operator can also be
used as a unary operator, sometimes called the stringify
operator because it turns its operand into a string. It can be
used only in the macro replacement text of a #define directive. It must be followed by a
parameter name for the macro being defined. The # operator and the parameter name are
replaced by a string literal whose contents are the text of the macro
argument that corresponds to the macro parameter. The macro argument
is not expanded before being converted to a string. Whitespace in the
argument is condensed to a single space character between tokens;
leading and trailing whitespace is removed.
The evaluation order of # and
## operators is undefined. If the
order is important, you can control the order by using multiple
macros.
Example
The following example prints the text [now is
the time]:
#define now then #define is was #define print(stuff) std::cout << "[" #stuff "]\n" print( now is the time );