回顧我碰到的東西來了,如同一些第三方的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
那麼,那是因爲'switch-case'的奇怪'goto label'實現。雖然你的具體情況可能有點奇怪,很難想出一個用例(查看[* Duff's Device *](http://en.wikipedia.org/wiki/Duff%27s_device)),但突破性案例的一般概念(當你離開'break'時)確實非常有用。 –
如果您現在正在尋求關於* Duff設備*工作原理的解釋,請點擊此處(http://stackoverflow.com/questions/514118/how-does-duffs-device-work)。 – devnull
在這種情況下,'case 1:'被編譯器視爲一個單獨的標籤。語法完全有效,但在這種情況下幾乎可以肯定(從上下文來看)邏輯錯誤。通過發送'state == 1'來測試它,你會看到不正確的結果。 – Chad