A macro parameter is an identifier named in a function-like macro definition. During preprocessing, arguments from an invocation are expanded and substituted for matching occurrences in the replacement text. TAKEAWAY: macro parameters belong to the replacement text, not to a function's runtime scope. section 16.1
Substituting parameters
#define BYTECOPY(T, S) memcpy(&(T), &(S), MINSIZE(T, S)) BYTECOPY(A, B) The parameters T and S receive the two invocation arguments. If A expands to redA, preprocessing produces text equivalent to memcpy(&(redA), &(B), MINSIZE(redA, B)). The argument count must match the parameter count, and commas inside additional parentheses do not separate arguments. section 16.1
Macro parameters have several precise preprocessing behaviors:
- Must be identifiers and are valid only within the replacement text. section 16.1
- Receive recursively expanded argument text before ordinary replacement. section 16.1
- Become string literals when preceded by #, preserving the argument's textual form; this use does not expand macros in that argument. section 16.3

