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)
任何人都可以帮我解释一下这段代码背后的逻辑是什么?它是如何工作的?
duff的设备注释应该足以解释背景,因此我将尽力解释这种情况:
开关检查c的最后2位,并跳转到while循环内的相应case语句。case语句下面的代码也将执行。控制然后到达while循环的末尾,因此它再次跳到开始以检查条件是否仍然为真。如果是,则执行循环内的所有语句,并重复循环直到条件为假。初始开关通常确保在第一次运行while循环时,c为4的倍数。
编辑:duff在Wikipedia上的设备。添加链接以使“ duff的设备注释”的含义更加明显。如果您赞成这个答案,请考虑赞成interjay的评论。
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |