【问题标题】:semicolon in fall through of switch case statementswitch case 语句中的分号
【发布时间】:2016-07-07 20:27:44
【问题描述】:

在作为 fall-through 一部分的 case 语句中添加分号有什么意义吗?我看到失败按预期工作,并猜测分号被解释为空语句。但是有分号有优点/缺点吗?是否有推荐的最佳实践?在下面的 javascript 示例中,请参见第一个 case 语句中的分号。

    switch(a) {
        case 2:;
        case 3: alert('hello'); break;
        default: alert('default hello');
    }

我也有兴趣了解与上述 C、C++ 和 Java 相关的最佳实践。我还看到一些文档,如果失败的 case 语句部分有语句,C# 会引发编译错误。像上面这样的空语句会在 C# 中触发错误吗?

【问题讨论】:

  • 我以前从未见过。并且认为拥有它没有任何意义。
  • 一个五种语言的问题!除了 CC++ 代码使用如此宽的字符常量很奇怪。
  • 在 Java 中你不需要分号,它只会落空
  • 在 C 中,分号标记代码块/语句的结尾,即使其中没​​有任何内容。在if()while()for() 之后,我会很重要。
  • 最佳 C 实践:对故意落入下一个案例的案例添加评论。 case 2:; // fall through.

标签: javascript java c# c++ c


【解决方案1】:

不,没有任何区别。

在我看来,我建议您不要使用它,因为它会使代码不太清晰。

在 C# 中这是一个错误。 D 也不允许; 作为空语句,你必须使用{}

【讨论】:

    【解决方案2】:

    ; 在 C、C++ 和 Java 中对您没有任何帮助。如果您不需要它,请不要使用它。但是,如果您正在实现 Duff's Device 或变体并让他们“失败”或“不中断”cmets,请务必让您的代码的未来读者感到震惊。

    在 C# 中

    switch(a) {
        case 2:;
        case 3: Console.WriteLine("hello"); break;
        default: Console.WriteLine("default hello");
    }
    

    通过中断 C# 允许的一点点下降来防止案例 2 和 3 执行相同的代码。

    switch(a) {
        case 2:
        case 3: Console.WriteLine("hello"); break;
        default: Console.WriteLine("default hello"); break;
    }
    

    在执行相同代码的情况 2 和 3 中有效。

    【讨论】:

      【解决方案3】:

      最佳实践

      通常是不使用空语句。

      像上面这样的空语句会在 C# 中触发错误吗?

      是的。

      【讨论】:

        【解决方案4】:

        语法上是一样的

        这肯定会让人感到困惑,所以我建议不要使用它

        【讨论】: