Next: Case Ranges, Previous: switch Example, Up: Statements [Contents][Index]
The cases in a switch statement can be inside other control
constructs. For instance, we can use a technique known as Duff’s
device to optimize this simple function,
void
copy (char *to, char *from, int count)
{
while (count > 0)
*to++ = *from++, count--;
}
which copies memory starting at from to memory starting at to.
Duff’s device involves unrolling the loop so that it copies
several characters each time around, and using a switch statement
to enter the loop body at the proper point:
void
copy (char *to, char *from, int count)
{
if (count <= 0)
return;
int n = (count + 7) / 8;
switch (count % 8)
{
do {
case 0: *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while (--n > 0);
}
}