写switch case语句不加break会怎样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写switch case语句不加break会怎样相关的知识,希望对你有一定的参考价值。

switch 语句 中 case 几 冒号,相当于 入口指示牌, 若 不加break; 则 从 入口case 进入后,接着会依次通过所有后续 case 指示牌 和语句,直到 switch 语句 结束处。
例如:
n=2; switch(n) case 1: x=9; case 2: x=7; case 4: x=12; defualt: x=8;
将从 case 2: 进入,依次执行:
x=7; case 4: x=12; defualt: x=8; 结束。最终 得到 x=8。
如果是 n=2; switch(n) case 1: x=9; case 2: x=7; break; case 4: x=12;break; defualt: x=8; ; 将从 case 2: 进入 执行 x=7; 遇 break; 则结束开关语句。最终 得到 x=7。
参考技术A switch case语句犯得错误:
会犯这种错误,都是基础不牢固导致的。但是这样的错误却花费了我数小时去debug.想来真是很让人郁闷。
看一段代码:(不想看代码直接看后面总结)
private void arrange()
switch (direction)
case 'U':
case'R':
case'D':
case'L':

在这个语句中,如果direction=U。那么四个case语句都将执行。如果direction=R。将执行剩下三个语句。原因是switch语句原理是跳转到caseX位置执行剩下的语句,直到最后或者遇见break为止。因此在每一条语句最后+break即可。
private void arrange()
switch (direction)
case 'U': break;
case'R': break;
case'D': break;
case'L': break;

这样就能,每一个direction执行一步操作。
当然还有 别的用法,比如一个direction,让他可以执行两条或者3条操作这种。
总结:
switch语句原理是跳转到caseX位置执行剩下所有的语句(包括其他case里面的),直到最后或者遇见break为止。因此在每一条语句最后+break即可。
因此不加break的话将会执行跳转到的case本身以及以下所有的语句。

switch语句中的fall-through


参考:​​C++关键字之fallthrough - 知乎​

在C++17中引入了fallthrough属性。该属性主要用于switch语句中。在C++的switch语句中,如果当前case分支中不加break, 便会执行下一个case分支的代码。

如下所示,由于n的值为1,代码首先执行case 1分支,然后又因为case 1分支中没有加break,所以接着执行case 2分支、case 3分支,一直到default分支。

而很多C++初学者容易犯这样的错误:在本应当在case分支中加入break的时候却忘了加了。于是编译器会针对这种情况输出Warning信息,提醒程序员他可能忘了加break了。

但是有些时候我们为了实现一些特定的逻辑,所以有意不加break, 但是又不想听到编译器的抱怨,该怎么样让编译器"闭嘴"呢?此时C++17中引入的fallthrough便派上用场了

以上是关于写switch case语句不加break会怎样的主要内容,如果未能解决你的问题,请参考以下文章

switch语句后面不加break结果是啥?

c语言case

switch 中没有break 如何执行

switch 语句中当执行完一个case后还能执行另一个case么

C语言switch case后如何执行多条命令

switch中的case不加break执行情况