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 );
See Also
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access