# operator and directive

# operator and directive Stringify operator and null directive

# // 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.


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

## operator, #define directive