Difficulty: Easy
Correct Answer: case j is invalid because case labels must be constant integer expressions, not variables
Explanation:
Introduction / Context:
This question tests understanding of the rules for case labels in a switch statement in C. It focuses on the requirement that case labels be constant expressions known at compile time.
Given Data / Assumptions:
Concept / Approach:
According to the C standard, each case label in a switch must be a constant integer expression that the compiler can evaluate at compile time. Examples include literal integers, enumeration constants, or expressions composed only of constants and operators. A plain variable such as j is not a constant expression. Therefore, case j is not valid as a case label.
Step-by-Step Solution:
Step 1: Identify the case labels in the switch statement: case 1 and case j.Step 2: case 1 is fine because 1 is a constant integer expression.Step 3: case j uses a variable j. The value of j is not a compile time constant expression.Step 4: The compiler must reject case j as an invalid case label, producing a diagnostic message.
Verification / Alternative check:
If you compile this program with a standard C compiler, you will receive an error similar to "case label does not reduce to an integer constant". If you change case j to case 2, the program compiles correctly, showing that the problem is specifically the use of a variable as a case label.
Why Other Options Are Wrong:
Option B is incorrect because the switch expression can legally be an int; it does not need to be char.Option C is false because printf can be used inside switch cases like any other statement.Option D is incorrect because a default label is optional in C; omitting it is allowed.
Common Pitfalls:
Programmers sometimes try to use variables or nonconstant expressions as case labels to make code more flexible. This is not allowed in standard C. If a dynamic decision is needed, it must be implemented with if or else logic rather than case labels.
Final Answer:
The error is that case j is invalid because case labels must be constant integer expressions, not variables.
Discussion & Comments