21.30 什麼是 ``達夫設備" (Duff's Device)?

這是個很棒的迂迴循環展開法, 由 Tom Duff 在 Lucasfilm 時所設計。 它的 ``傳統" 形態, 是用來複製多個字節:
    register n = (count + 7) / 8;   /* count > 0 assumed */
    switch (count % 8)
    {
    case 0:    do { *to = *from++;
    case 7:     *to = *from++;
    case 6:     *to = *from++;
    case 5:     *to = *from++;
    case 4:     *to = *from++;
    case 3:     *to = *from++;
    case 2:     *to = *from++;
    case 1:     *to = *from++;
          } while (--n > 0);
    }
這裡 count 個字節從 from 指向的數組複製到 to 指向的 內存地址 (這是個內存映射的輸出寄存器, 這也是為什麼它沒有被增加)。它把  swtich 語句和複製 8 個字節的循環交織在一起, 從而解決了剩餘字節的 處理問題 (當 count 不是 8 的倍數時)。相信不相信, 像這樣的把  case 標誌放在嵌套在 swtich 語句內的模塊中是合法的。 當他公佈這個技巧給 C 的開發者和世界時, Duff 注意到 C 的 swtich  語法, 特別是 ``跌落" 行為, 一直是被爭議的, 而 ``這段代碼在爭論中形成了某種 論據, 但我不清楚是贊成還是反對"。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)