Difficulty: Easy
Correct Answer: Correct — union members may have different sizes; the union's size equals the size of its largest member
Explanation:
Introduction / Context:
Unions in C allow multiple members to share the same memory location. This question checks whether union members may have different sizes and what that means for storage and alignment.
Given Data / Assumptions:
Concept / Approach:
The size of a union is at least the size of its largest member, possibly rounded up for alignment. All members overlap at offset 0, so only one member is meaningfully stored at a time.
Step-by-Step Solution:
1) Consider a union with int and double members.2) sizeof(int) might be 4; sizeof(double) might be 8.3) sizeof(union) becomes at least 8 (the larger member), not 4 + 8.4) Different member sizes are allowed; the union allocates memory to accommodate the largest.
Verification / Alternative check:
Check sizeof for several unions on your platform; it always matches the largest member (with alignment considered).
Why Other Options Are Wrong:
Option B: Claims equal sizes are required — not true in C.
Option C: Not implementation freedom; the standard allows differing sizes.
Option D: No packing pragmas are required for this rule.
Option E: Same alignment is not a prerequisite for differing sizes.
Common Pitfalls:
Assuming unions sum member sizes; they do not. Confusing unions with structs regarding layout and storage is common.
Final Answer:
Correct — union members may have different sizes; the union's size equals that of its largest member.
Discussion & Comments