我最近读过这一页关于奇怪的 C 片段代码。其中大多数是可以理解的。但我无法理解这一点:
switch(c & 3) while((c -= 4) >= 0){
foo(); case 3:
foo(); case 2:
foo(); case 1:
foo(); case 0:
}
谁能帮我看看这段代码背后的逻辑是什么?它是如何运作的?
达夫的设备注释应该足以很好地解释背景,所以我将尝试解释这个案例:
switch 检查 c 的最后 2 位,并跳转到 while 循环内相应的 case 语句。 case 语句下面的代码也会被执行。然后控制到达 while 循环的末尾,因此它再次跳转到开头以检查条件是否仍然为真。如果是,则执行循环内的所有语句,并重复循环,直到条件为假。初始切换通常确保 while 循环第一次运行时 c 为 4 的倍数。
Edit: 维基百科上达夫的设备。添加链接以使我对“笨蛋的设备评论”的含义更加明显。如果您支持这个答案,请考虑支持 interjay 的评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)