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. ExampleThe 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 |