coding-style - Switch 语句失败...应该允许吗?

标签 coding-style switch-statement

从我记事起,我就一直避免使用 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;
   }

这样,每当 case 为 0、1 时,它就会执行 switch 语句中的所有操作。我已经看到了这一点,我只是不知道我是否同意 switch 语句应该这样使用。我认为第一个代码示例非常有用且安全。第二个似乎有点危险。

最佳答案

这可能取决于您认为失败的原因。我对这种事情没意见:

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 标签,我几乎总是认为这是邪恶的。也许将公共(public)代码移至一个函数并从两个地方调用会是一个更好的主意。

请注意,我使用 C++ FAQ "evil" 的定义

关于coding-style - Switch 语句失败...应该允许吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/188461/

相关文章:

android - 哪种方法我应该采用 1 个接收器和 10 个滤波器或 10 个接收器和 1 个滤波器

jquery - 在 AS3 和其他基于类的语言中编写 jQuery 风格的函数链

c - 结构和 malloc 代码得到奇怪的输出

javascript - 这个 switch 语句和 jQuery 有什么问题?

php - 从 mysql 中选择 PHP Switch 大小写值

coding-style - Puppet:如果> 80 个字符,我如何将命令包装成两行?

c++ - 理解写得不好的代码,第二年 CS 过去的论文

C 样式 : why assign variables with only one space?

java - 现在使用 if else 语句时出现不兼容错误

c - 我的 switch 语句遇到问题...它有任何限制吗?