2014-08-31 9 views
6

Ho letto recentemente this page su strani codici snippet C. La maggior parte di loro era comprensibile. Ma non riesco a capire questo:"interruttore" misto e "while" in C

switch(c & 3) while((c -= 4) >= 0){ 
    foo(); case 3: 
    foo(); case 2: 
    foo(); case 1: 
    foo(); case 0: 
} 

Qualcuno può darmi una mano quale logica è dietro di questo codice? E come funziona?

+8

http://en.wikipedia.org/wiki/Duff%27s_device – interjay

+1

possibile duplicato di [In che modo è possibile compilare il codice dispositivo di Duff?] (Http://stackoverflow.com/questions/5569416/how-can-duffs -dispositivo-codice-essere-compilato) – usr2564301

+1

Questo non è valido C. È necessario avere un _statement_ dopo ogni etichetta 'case'. –

risposta

4

commento del dispositivo del duff dovrebbe spiegare lo sfondo abbastanza bene, così ho ll cercare di spiegare questo caso:

L'interruttore controlla gli ultimi 2 bit di c, e salta al rispettivo caso-istruzione all'interno il tempo ciclo continuo. Viene anche eseguito il codice sotto la dichiarazione del caso. Il controllo quindi raggiunge la fine del ciclo while, quindi torna nuovamente all'inizio per verificare se la condizione è ancora vera. Se lo è, tutte le istruzioni all'interno del ciclo vengono eseguite e il ciclo viene ripetuto finché la condizione non è falsa. Lo switch iniziale di solito garantisce che c sarà un multiplo di 4 quando il ciclo while viene eseguito per la prima volta.

Modifica: duff's device on Wikipedia. Aggiunta di link per rendere più ovvio cosa intendevo per "commento del dispositivo del duff". Si prega di considerare l'upvoting del commento di interjay nel caso in cui si investa questa risposta.