2011-10-09 35 views
9

我有一个复杂的switch声明,我忘记把break放在case之一的末尾。这是非常合法的,因此我碰到了下一个case如何告诉gcc警告(或失败)switch/case语句而不中断?

如果我忽略了一条break声明,是否有任何方法让gcc发出警告(或者更好,失败)?

我知道有很多有效的使用案例(我经常在我的代码中使用它们),如this question所示,显然这样的警告(或失败)需要一个简单的弃权,以便我可以轻松地说, “我确实想在这里消失。”

有什么办法告诉gcc做到这一点?

+0

老实说,如果这就是你想要什么,我会说,根本就没有使用开关/箱。开关/外壳的唯一优势仍然是,它很容易在你想要的地方跌落。 –

+0

Hehehe,C#强制你放置break语句,如果你不需要编译 – BlackBear

+0

只是好奇,我们能看到代码吗?也许有更好的解决方案,不需要开关。 – fredoverflow

回答

1

你可以构建的grep/perl的/ emacs的/等一个正则表达式查找所有的地方有case之前没有break

0

简短的回答是没有,gcc中没有这样的标志来做到这一点。开关盒经常用于坠落,所以这就是为什么在gcc中有这样一个标记是没有意义的。

+2

我认为它是有道理的,它只是不需要默认为打开。似乎它可能适合于-Wextra或-pedantic。 –

4

此检查适用于C和C++代码的免费静态分析器Cppcheck。该检查目前标记为“实验”,因此您需要使用--experimental命令行开关将其打开。

此检查警告不要了落空至下一情况下没有控制流的语句,如breakcontinuereturn等,除非有一个与文字注释,如// fall through紧接的下一个非空的情况下条款case

通过查看源代码中的switchFallThroughCase test cases,您可以了解这种处理的构造类型。