Considere este ejemplo:
void send(int *to, int *from, int count) { int n = (count+7)/8; switch(count%8) { case 0: do{*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); } }
¿Qué hace?
Básicamente, todos los ‘casos’ son como la etiqueta en la declaración goto. Aunque la instrucción switch es el alcance adjunto en el sentido léxico, la instrucción do while es el alcance adjunto real de la mayor parte del código. Switch es simplemente un enrutador para proporcionar varias entradas a la declaración do while. La próxima vez, cuando tenga que decidir entre usar switch o if, tenga en cuenta este ejemplo.
Referencia:
1. Dispositivo de Duff