...
Token pasting is most useful when one or both of the tokens comes from a macro argument. If either of the tokens next to an ##
is a parameter name, it is replaced by its actual argument before ##
executes. The actual argument is not macro - expanded first.
Stringification
...
Note also that macro parameters cannot be individually parenthesized when concatenating tokens using the ##
operator, converting macro parameters to strings using the #
operator, or concatenating adjacent string literals. This is an exception PRE01-EX2 to PRE01-A. Use parentheses within macros around parameter names.
...
The macro invocation xstr(foo)
expands to "4"
. This is because 's'
is stringified when it is used in str()
, so it is not macro - expanded first. However, 's'
is an ordinary argument to xstr()
, so it is completely macro - expanded before xstr()
is expanded. Consequently, by the time str()
gets to its argument, it has already been macro - expanded.
Risk Assessment
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
PRE05-A | low | unlikely | medium | P2 | L3 |
...