If, in the replacement list, a parameter is immediately
preceded by a
#
preprocessing token,
both are replaced by a single character string literal preprocessing token that
contains the spelling of the preprocessing token sequence for the
corresponding argument (excluding placemarker tokens)
.  Let the 
stringizing argument be the preprocessing token sequence
for the corresponding argument with placemarker tokens removed
.  Each occurrence of whitespace between the stringizing argument's preprocessing
tokens becomes a single space character in the character string literal
.  Whitespace before the first preprocessing token and after the last
preprocessing token comprising the stringizing argument is deleted
.  Otherwise, the original spelling of each preprocessing token in the
stringizing argument is retained in the character string literal,
except for special handling for producing the spelling of
s,
character-literals,
and 
string-literals
(including the delimiting 
U+0022 quotation mark (
"))
contained within the preprocessing token:
a 
U+005c reverse solidus character (
\)
is inserted before each 
U+0022 quotation mark and
U+005c reverse solidus character of a
,
character-literal,
or 
string-literal,
and each new-line character is
replaced by the two-character sequence 
\n.  If the replacement that results is not a valid character string literal,
the program is ill-formed
.  The character string literal corresponding to
an empty stringizing argument is 
"".  The order of evaluation of
#
and
##
operators is unspecified
.