switch case 语句中的分号

Posted

技术标签:

【中文标题】switch case 语句中的分号【英文标题】:semicolon in fall through of switch case statement 【发布时间】: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. 【参考方案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】:

语法上是一样的

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

【讨论】:

以上是关于switch case 语句中的分号的主要内容,如果未能解决你的问题,请参考以下文章

c语言中case是啥意思

C语言中 For语句后面的括号里有两个分号是啥意思啊?

C语言中 For语句后面的括号里有两个分号是啥意思啊?

Linux shell script switch...case All In One

C语言中的Switch-case语句

在 Switch 中的 Case 语句中添加附加条件