Difficulty: Easy
Correct Answer: 20
Explanation:
Introduction / Context:
Token pasting (##) concatenates tokens at preprocessing time to form a new token. This question checks whether you recognize that concatenating va1 with 2 yields the identifier va12, which is a different variable with its own value.
Given Data / Assumptions:
va1 = 10, va12 = 20.#define FUN(i, j) i##j.FUN(va1, 2).
Concept / Approach:
The macro concatenates the tokens va1 and 2 to form va12. Since va12 exists and is initialized to 20, the printf prints 20. If va12 did not exist, this would be a compile-time error, showing that token pasting occurs before semantic checks.
Step-by-Step Solution:
FUN(va1, 2) → va12.Replace in printf: printf("%d\n", va12);.Value of va12 is 20 → prints 20.
Verification / Alternative check:
Try FUN(va, 12) with int va12 defined, or change the numbers to see compile failures when the pasted identifier is undefined.
Why Other Options Are Wrong:
va1, not the pasted name.“1020” would be string concatenation, which is not happening here.“12” is unrelated to the variable’s value.Compilation error does not occur because va12 is defined.
Common Pitfalls:
Confusing token pasting with runtime string operations; expecting arithmetic with 1 and 2 instead of identifier concatenation.
Final Answer:
20.
Discussion & Comments