如何告诉gcc在没有中断的情况下对switch / case语句发出警告(或失败)?

时间:2011-10-09 12:03:22

标签: c++ gcc switch-statement gcc-warning

我有一个复杂的switch语句,我忘了在break之一的末尾添加case。这是非常合法的,因此我对下一个case有所了解。

如果我忽略了break陈述,有没有办法让gcc警告(甚至更好,失败)?

我意识到有许多有效的用例(并且我经常在我的代码中使用它们),如this question中所示,所以显然这样的警告(或失败)需要简单的弃权才能使我能够很容易说,“我确实想要在这里堕落。”

有没有办法告诉gcc这样做?

6 个答案:

答案 0 :(得分:6)

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652讨论了这样一个功能(-Wswitch-break)。但它似乎尚未实施

答案 1 :(得分:4)

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

此检查会针对非空情况条款发出警告,该子句在没有控制流语句(例如breakcontinuereturn等等的情况下进入下一个案例,除非< / em>在下一个// fall through之前有case等措辞的评论。

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

答案 2 :(得分:2)

我刚刚通过gcc选项,没有一个会至少给你一个通知。 有-Wswitch,-Wswitch-default和-Wswitch-enum(http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options),但它们都不适合你。

我最好的选择是使用'else if'语句

答案 3 :(得分:1)

您可以为grep / perl / emacs / etc构建一个正则表达式,以查找break之前没有case的所有地方。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

GCC 7的警告已启用-Wextra-Wimplicit-fallthrough(=[1-5])?https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/