Do not write include any executable statement statements inside a switch statement before the first case label. The Such statements are never executed , as because the compiler ignores statements present before the first case statement inside the switch blockthem.
If a programmer declares variables and , initializes them before the first case statement, and try then tries to use them inside any of the case statements, those variables will have scope inside the switch block , but will not be initialized and will consequently contain garbage values.
...
This noncompliant code example declares variables and contains executable statements before the first case label within the switch statement.
| Code Block | ||
|---|---|---|
| ||
int func(int expr) { switch(expr){ int i = 4; f(i); case 0: i = 17; /* falls through into default code */ default: printf(“%d\nâ€, i); } return 0; } |
Implementation Details
On execution of When the above example is executed on gcc version GCC Version 4.1.2, the variable i is instantiated with automatic storage duration within the block, but it is not initialized. Consequently, if the controlling expression has a non-zero value, the call to ((printf()}} will access an indeterminate value of i. Similarly, the call to the function will also never get be executed either.
| |
|---|---|
0 | 17 nonzero |
non-zero | indeterminate |
Compliant Solution
...
| Code Block | ||
|---|---|---|
| ||
int func(int expr) {
int i = 4; /* Move the code outside the switch block */
f(i); /* Now the statements will get executed */
switch(expr) {
case 0:
i = 17;
/*falls through into default code */
default:
printf(“%d\nâ€, i);
}
return 0;
}
|
Risk Assessment
Using test conditions or initializing variables inside the switch block before the first case statement , in a switch block can result in unexpected behavior as the above because that code will not be executed.
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
MSC35-C | Medium medium | unlikely | medium | P2 | L3 |
References
MISRA 04 chapter Chapter 6.14