Difficulty: Easy
Correct Answer: multiply
Explanation:
Introduction / Context:
This checks knowledge of macro stringification and why a two-level macro is needed to stringify another macro’s replacement text instead of its name. It is a classic pattern used in build-time banners and generated identifiers.
Given Data / Assumptions:
#define oper multiply (token replacement)#define str(x) #x and #define Xstr(x) str(x)opername with printf.
Concept / Approach:
Single-level stringification str(oper) would yield the literal "oper". However, two-level expansion Xstr(oper) first expands oper to multiply, then stringifies to "multiply". Therefore, the program prints multiply (without quotes).
Step-by-Step Solution:
Xstr(oper) → str(oper).Before applying #, inner argument expands: oper → multiply.Stringify: str(multiply) → "multiply".Prints: multiply.
Verification / Alternative check:
Change oper to divide and recompile; you will see divide printed, proving two-step expansion occurs.
Why Other Options Are Wrong:
"oper" would happen if you used str(oper) directly.
Common Pitfalls:
Expecting # to expand its argument before stringifying; it does not without the two-level trick.
Final Answer:
multiply.
Discussion & Comments