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# 中触发错误吗?
【问题讨论】:
我以前从未见过。并且认为拥有它没有任何意义。 一个五种语言的问题!除了C
和 C++
代码使用如此宽的字符常量很奇怪。
在 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 语句中的分号的主要内容,如果未能解决你的问题,请参考以下文章