我知道這之前已經散列出來,我讀過的每一個問題,並回答開關,我可以找到。我的問題不是關於達夫設備的語法或功能,而是關於一般情況下的切換,這恰好說明了這個問題。switch語句傻了眼
{
int n = (count + 7)/8;
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);
}
我明白了這一點,n的值隨着每次迭代而遞減。我也明白,鬆散的編譯器規則允許其他情況跳轉到do循環中(奇怪但我理解它)
但由於switch語句是(count%8)的函數,並且沒有任何內容在更改計數爲什麼計數首先在開關內產生不同的模餘數?
假設(計數%8)在所述第一通產生7。處理情況7:計數值保持不變,因此(計數%8)的值應該保持不變,因此情況6:不應該爲真,也不應該有任何其他情況並且沒有缺省值n應該遞減,並且do循環的下一次迭代應該始於計數值不變。所以看起來循環會減少到0,count永遠不會改變,所以它只會執行第7種情況,使所有其他代碼無意義。
但是,如果那是真的,那麼達夫的設備將無法工作,因爲它顯然依賴於int(n + 7)/ 8來產生8個重複值,每個值的計數值爲n並且與(計數%8)配對意味着該計數確實遞減以產生7到0之間遞減的模餘數的循環。
從我的新手角度來看,這似乎工作,將需要一個--count在該循環某處。所以我的結論是,我不明白交換機是如何工作的。我會很感激任何解釋。