8

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

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

谁能帮我弄清楚这段代码背后的逻辑是什么?它是如何工作的?

4

1 回答 1

5

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

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

编辑:duff 在 Wikipedia 上的设备。添加链接以使我对“达夫的设备评论”的意思更加明显。如果您支持这个答案,请考虑支持 interjay 的评论。

于 2014-08-31T13:54:27.430 回答