我最近阅读了有关奇怪的C代码段的this page。大多数都是可以理解的。但我无法理解这一点:
switch(c & 3) while((c -= 4) >= 0){
foo(); case 3:
foo(); case 2:
foo(); case 1:
foo(); case 0:
}
任何人都可以帮我解释这段代码背后的逻辑吗?它是如何工作的?
答案 0 :(得分:4)
duff的设备评论应该很好地解释背景,所以我将尝试解释这个案例:
交换机检查c的最后2位,并跳转到while循环内的相应case语句。 case语句下面的代码也会执行。然后控制到达while循环的末尾,因此它再次跳转到开头以检查条件是否仍然为真。如果是,则执行循环内的所有语句,并重复循环直到条件为假。初始开关通常确保当while循环第一次运行时c将是4的倍数。
修改:duff's device on Wikipedia。添加链接可以更明显地表达我的意思" duff的设备评论"。如果你赞成这个答案,请考虑支持interjay的评论。