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); } }