2012-09-11 66 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

相关问题