Difficulty: Easy
Correct Answer: The ellipsis must be last; fixed arguments cannot follow it
Explanation:
Introduction / Context:
The grammar and calling convention for variadic functions in C require that the ellipsis ... terminates the parameter list. This determines where the unnamed arguments begin in the call frame and allows va_start to compute their location based on the last named parameter.
Given Data / Assumptions:
Concept / Approach:
Because va_start needs the last named parameter, the syntax and ABI expect the ellipsis to appear at the very end. Any attempt to place a named parameter after the ellipsis breaks that model and is not allowed by the language grammar. Compilers will reject such a declaration.
Step-by-Step Solution:
Declare the last fixed parameter (e.g., const char *fmt).Place the ellipsis immediately after fmt, making it the final token in the parameter list.Inside the body, call va_start(ap, fmt) and then va_arg repeatedly.End with va_end(ap).
Verification / Alternative check:
Try to compile a prototype like int f(..., int x); — it is ill-formed. In contrast, int f(int x, ...); is valid and reflects how printf and friends are defined.
Why Other Options Are Wrong:
Allowing fixed parameters after the ellipsis contradicts the C standard. The compiler does not reorder parameters. Pointer status or OS does not change the rule.
Common Pitfalls:
Believing that variadic arguments can be “inserted” in the middle; forgetting that the ellipsis must terminate the list.
Final Answer:
The ellipsis must be last; fixed arguments cannot follow it
Discussion & Comments