2012-09-11 97 views
3

可能重複:
Why was the switch statement designed to need a break?爲什麼默認情況下轉換語句轉入?

最流行的語言並[c,C++,JAVA]的有趣的現象是通過默認該開關是落空。

我很好奇理性,有人知道這個故事嗎?

+1

它不是在C#。 –

+0

我不知道歷史,但如果不是這樣,那麼switch塊和if-elseif塊之間就不會有區別。 – Augusto

+0

以後,請在詢問多次提問之前使用搜索功能。 – verdesmarald

回答

1

在C中,原因是爲了使switch可以輕易地被優化成一個跳轉表。基本上,根據表達式,應用程序將計算跳轉距離,跳轉到某個點,然後繼續執行點。

但是,我認爲這種行爲有時是有用的,因爲它有助於避免代碼重複乘以case s,並且畢竟在需要時並不難於放置break

Wiki有一個體面的例子來說明落下如何利用:

switch (n) { 
    case 0: 
    printf("You typed zero."); 
    break; 
    case 4: 
    printf("n is an even number."); 
    case 1: 
    case 9: 
    printf("n is a perfect square."); 
    break; 
    case 2: 
    printf("n is an even number."); 
    case 3: 
    case 5: 
    case 7: 
    printf("n is a prime number."); 
    break; 
    case 6: 
    case 8: 
    printf("n is an even number."); 
    break; 
    default: 
    printf("Only single-digit numbers are allowed."); 
} 
+0

另一種設計*可能已經打破默認設置,並且需要明確的穿透。這會讓很多人忘記休息時間。 –

+0

@Bo,是的,但是如果他們使用了,說'繼續'來強迫失敗,那就會有點含糊。像「它會繼續嗎?它會繼續處理這些案例,還是會在'switch'之後繼續執行?」雖然我同意它現在的工作方式也不是很直觀。 – SingerOfTheFall

相關問題