我最近阅读了有关奇怪的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的设备比普通的循环代码更快,可以展开但没有优化.但我无法理解代码是如何编译的.
我想这是关于切换语法的一个技巧.但不是了.
怎样才能做到,而句子中存在开关句子?很奇怪.
有没有人可以解释这个?
编辑: 另一个问题.为什么duff使用8?它可能是16,65536或其他什么.因为代码大小?还有其他原因吗?例如,缓存或流水线操作的好处.