Tag: duffs device

在C中混合’切换’和’同时’

我最近阅读了有关奇怪的C代码段的页面 。 大多数都是可以理解的。 但我无法理解这一点: switch(c & 3) while((c -= 4) >= 0){ foo(); case 3: foo(); case 2: foo(); case 1: foo(); case 0: } 任何人都可以帮我解释一下这段代码背后的逻辑是什么? 它是如何工作的?

如何编译Duff的设备代码?

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

切换案例奇怪的范围

回顾一些第三方C代码我遇到了类似的事情: switch (state) { case 0: if (c==’A’) { // open brace // code… break; // brace not closed! case 1: // code… break; } // close brace! case 2: // code… break; } 在我正在审查的代码中,这似乎只是一个错字,但我很惊讶它编译出错误。 为什么这个有效的C? 与在预期位置关闭支撑相比,对此代码执行的影响是什么? 有什么情况可以使用吗? 编辑:在示例中,我查看了所有中断(如上所述) – 但如果在0或1的情况下中断,则答案还可以包括行为。