Control Flow
Switch Statement
A switch compares one expression against several constant cases.
switch
`switch (value)` selects a matching `case` label.
break
`break` exits the switch after the selected case is handled.
Switch Statement
switch_statement.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int level = 2;
const char *label = "unknown";
switch (level) {
case 1:
label = "low";
break;
case 2:
label = "medium";
break;
case 3:
label = "high";
break;
default:
label = "other";
break;
}
printf("level=%s\n", label);
return 0;
}
#include <stdio.h>
int main(void) {
int level = 1;
const char *label = "unknown";
switch (level) {
case 1:
label = "low";
break;
case 2:
label = "medium";
break;
case 3:
label = "high";
break;
default:
label = "other";
break;
}
printf("level=%s\n", label);
return 0;
}
#include <stdio.h>
int main(void) {
int level = 3;
const char *label = "unknown";
switch (level) {
case 1:
label = "low";
break;
case 2:
label = "medium";
break;
case 3:
label = "high";
break;
default:
label = "other";
break;
}
printf("level=%s\n", label);
return 0;
}
level ← 2, label ← unknown
3int main(void) {4 int level→ 2 = 2; //@level=1, 35 const char *label→ unknown = "unknown";switch (level)
7switch (level2) {8 case 1:label ← medium
10 break;11case 2:12 label→ medium = "medium";13 break;label = "medium";
11case 2:12 label = "medium";13 break;14case 3:printf("level=%s ", label);
22 printf("level=%s\n", labelmedium);23 return 0;24}outputlevel=medium
level ← 1, label ← unknown
3int main(void) {4 int level→ 1 = 1;5 const char *label→ unknown = "unknown";switch (level)
7switch (level1) {8 case 1:label ← low
7switch (level) {8 case 1:9 label→ low = "low";10 break;label = "low";
8case 1:9 label = "low";10 break;11case 2:printf("level=%s ", label);
22 printf("level=%s\n", labellow);23 return 0;24}outputlevel=low
level ← 3, label ← unknown
3int main(void) {4 int level→ 3 = 3;5 const char *label→ unknown = "unknown";switch (level)
7switch (level3) {8 case 1:label ← high
13 break;14case 3:15 label→ high = "high";16 break;label = "high";
14case 3:15 label = "high";16 break;17default:printf("level=%s ", label);
22 printf("level=%s\n", labelhigh);23 return 0;24}outputlevel=high
Follow the Cases
levelstarts as2.labelstarts asunknown.switch (level)checks the case labels.case 2matches and setslabeltomedium.breakexits the switch, so the program printslevel=medium. | level | matching case | label | | --- | --- | --- | | 2 |case 2| medium | | 1 |case 1| low | | 3 |case 3| high |
Exercise: switch_statement.c
Reproduce level=medium, then use the pinned level variants 1 and 3 to predict level=low and level=high.