我有一个复杂的switch
语句,我忘了在break
之一的末尾添加case
。这是非常合法的,因此我对下一个case
有所了解。
如果我忽略了break
陈述,有没有办法让gcc警告(甚至更好,失败)?
我意识到有许多有效的用例(并且我经常在我的代码中使用它们),如this question中所示,所以显然这样的警告(或失败)需要简单的弃权才能使我能够很容易说,“我确实想要在这里堕落。”
有没有办法告诉gcc这样做?
答案 0 :(得分:6)
在http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652讨论了这样一个功能(-Wswitch-break)。但它似乎尚未实施
答案 1 :(得分:4)
此检查在Cppcheck中提供,这是一个用于C和C ++代码的免费静态分析器。该检查目前标记为“实验性”,因此您需要使用--experimental
命令行开关将其打开。
此检查会针对非空情况条款发出警告,该子句在没有控制流语句(例如break
,continue
,return
等等的情况下进入下一个案例,除非< / 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/