# Preprocessor Macro Operator
The # (single number sign) operator converts a
parameter of a function-like macro into a character string
literal. For example, if macro ABC is defined
using the following directive:
#define ABC(x) #x
all subsequent invocations of the macro ABC would
be expanded into a character string literal containing the
argument passed to ABC. For example:
Invocation |
Result of Macro Expansion
|
ABC(1) |
"1" |
ABC(Hello there) |
"Hello there" |
The # operator should not be
confused with the # null directive.
Use the # operator in a
function-like macro definition according to the following rules:
- A parameter following #
operator in a function-like macro is converted into a
character string literal containing the argument passed
to the macro.
- White-space characters that appear before
or after the argument passed to the macro are deleted.
- Multiple white-space characters imbedded
within the argument passed to the macro is replaced by a
single space character.
- If the argument passed to the macro
contains a string literal and if a \
(backslash) character appears within the literal, a
second \ character is inserted before
the original \ when the macro is
expanded.
- If the argument passed to the macro
contains a " (double quotation
mark) character, a \ character is
inserted before the " when the
macro is expanded.
- If the argument passed to the macro
contains a ' (single quotation mark)
character, a \ character is inserted
before the ' when the macro is expanded.
- The conversion of an argument into a
string literal occurs before macro expansion on that
argument.
- If more than one ##
operator or # operator appears in the
replacement list of a macro definition, the order of
evaluation of the operators is not defined.
- If the result of the macro expansion is
not a valid character string literal, the behavior is
undefined.
The following example demonstrates the use of
the # operator:
Sample Preprocessor Macro Definitions |
#define STR(x) #x
#define XSTR(x) STR(x)
#define ONE 1 |
Invocation |
Result of Macro Expansion
|
STR(\n "\n" '\n') |
"\n \"\\n\" '\\n'" |
STR(ONE) |
"ONE" |
XSTR(ONE) |
"1" |
XSTR("hello") |
"\"hello\"" |
Preprocessor
Directives
Preprocessor
Macros
Preprocessor Macro
Operators
#define Preprocessor
Directive