在C中混合’切换’和’同时’

我最近阅读了有关奇怪的C代码段的页面 。 大多数都是可以理解的。 但我无法理解这一点:

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

任何人都可以帮我解释一下这段代码背后的逻辑是什么? 它是如何工作的?

duff的设备评论应该很好地解释背景,所以我将尝试解释这个案例:

交换机检查c的最后2位,并跳转到while循环内的相应case语句。 case语句下面的代码也会执行。 然后控制到达while循环的末尾,因此它再次跳到开头以检查条件是否仍然为真。 如果是,则执行循环内的所有语句,并重复循环直到条件为假。 当while循环第一次运行时,初始开关通常确保c将是4的倍数。

编辑: 维基百科上的duff设备 。 添加链接以使“duff的设备评论”更明显地表达我的意思。 如果你赞成这个答案,请考虑支持interjay的评论。