C type sizes (typical systems): “A float is 4 bytes wide, whereas a double is 8 bytes wide.” Assess this statement for common ABIs while acknowledging portability notes.
-
ACorrect
-
BIncorrect
-
CCorrect only with -O2 or higher
-
DCorrect only on 8-bit microcontrollers
-
EValid only for C++ but not C
Answer
Correct Answer: Correct
Explanation
Introduction / Context:On mainstream desktop and server platforms, compilers typically implement float as 4 bytes (single precision) and double as 8 bytes (double precision). However, C allows implementations to choose representations, so exact sizes are technically implementation-defined. This question asks whether the common statement is correct in practice across typical environments.
Given Data / Assumptions:
- Common ABIs like LP64 or LLP64.
- IEEE-754 formats widely used by compilers such as GCC, Clang, and MSVC.
- We assess the statement’s correctness for typical systems, not exotic targets.
Concept / Approach:In most environments, sizeof(float) == 4 and sizeof(double) == 8. The standard headers document limits consistent with these sizes. While exceptions exist (special embedded targets or unusual ABIs), the statement holds for the majority of platforms students encounter.
Step-by-Step Solution:
Recall common representations: float (32-bit), double (64-bit).Check with sizeof in code to confirm on a specific system.Acknowledge portability: sizes are implementation-defined, but the claim is accurate on typical PCs.Verification / Alternative check:Write a small program printing sizeof(float) and sizeof(double). Expect 4 and 8 on mainstream systems. Compare with FLT_MANT_DIG and DBL_MANT_DIG in
Why Other Options Are Wrong:
Incorrect: contradicts common practice.Optimization level, 8-bit MCUs, or “only C++” have no bearing on fundamental type sizes mandated by a given implementation.Common Pitfalls:Forgetting that long double may vary (80-bit, 128-bit, or equal to double) and that exotic compilers can deviate; always verify with sizeof on target.
Final Answer:Correct.