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

fro*_*tto 7 c while-loop switch-statement duffs-device

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

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

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

mid*_*dor 5

duff的设备注释应该足以解释背景,因此我将尽力解释这种情况:

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

编辑:duff在Wikipedia上的设备。添加链接以使“ duff的设备注释”的含义更加明显。如果您赞成这个答案,请考虑赞成interjay的评论。