Switch Statement Fallthrough…应该允许吗?

只要我记得,我就避免使用switch语句失败。实际上,我不记得它曾经作为一种可能的方式进入我的意识,因为它很早就被钻入我的脑海,因为它只不过是switch语句中的一个错误。但是,今天我遇到了一些设计上使用它的代码,这使我立即想知道社区中的每个人对switch语句失败的看法。


是某种编程语言应该明确不允许的(就像C#一样,尽管它提供了一种解决方法),或者它是任何一种功能强大到足以让程序员掌握的语言的功能?


编辑: 我对失败的含义还不够具体。我经常使用这种类型:


    switch(m_loadAnimSubCt){

        case 0: 

        case 1: 

            // Do something

            break;

        case 2:

        case 3:

        case 4:

            // Do something

            break;

   }

但是,我担心这样的事情。


   switch(m_loadAnimSubCt){

        case 0: 

        case 1: 

            // Do something but fall through to the other cases 

            // after doing it.

        case 2:

        case 3:

        case 4:

            // Do something else.

            break;

   }

这样,只要大小写为0、1,它将在switch语句中执行所有操作。我已经设计地看到了这一点,但我不知道是否同意应该以这种方式使用switch语句。我认为第一个代码示例非常有用且安全。第二个似乎有点危险。


编码样式的 开关语句


婷婷同学_
浏览 1114回答 3
3回答

暮色呼如

这可能取决于您认为的失败之处。我对这种事情还可以:switch (value){  case 0:    result = ZERO_DIGIT;    break;  case 1:  case 3:  case 5:  case 7:  case 9:     result = ODD_DIGIT;     break;  case 2:  case 4:  case 6:  case 8:     result = EVEN_DIGIT;     break;}但是,如果您有一个case标签,后跟代码进入另一个case标签,那么我几乎总是认为这很邪恶。也许将通用代码移至函数并从两个地方调用将是一个更好的主意。并且请注意,我使用“邪恶”的C ++常见问题解答定义

FFIVE

这是一把两刃剑。有时非常有用,经常很危险。什么时候好?当您想要10个案件时,所有案件的处理方式都相同...switch (c) {  case 1:  case 2:            ... do some of the work ...            /* FALLTHROUGH */  case 17:            ... do something ...            break;  case 5:  case 43:            ... do something else ...            break;}我喜欢的一条规则是,如果您想做任何想排除中断的事情,则需要明确注释/ * FALLTHROUGH * /以表明您的意图。

炎炎设计

失败确实是一件方便的事,具体取决于您在做什么。考虑以下简洁明了的方式来安排选项:switch ($someoption) {  case 'a':  case 'b':  case 'c':    // do something    break;  case 'd':  case 'e':    // do something else    break;}想象一下使用if / else这样做。真是一团糟。分享编辑
打开App,查看更多内容
随时随地看视频慕课网APP