我有一个复杂的switch
语句,我忘了在其中一个sbreak
的末尾加上 a。case
这是非常合法的,结果我掉到了下一个case
.
如果我忘记发表声明,有什么方法可以让 gcc 发出警告(甚至更好,失败)break
?
我意识到有许多有效的用例(并且我经常在我的代码中使用它们),如this question所示,所以显然这样的警告(或失败)需要一个简单的弃权,以便我可以轻松地说,“我愿意想从这里掉下去。”
有没有办法告诉 gcc 这样做?
我有一个复杂的switch
语句,我忘了在其中一个sbreak
的末尾加上 a。case
这是非常合法的,结果我掉到了下一个case
.
如果我忘记发表声明,有什么方法可以让 gcc 发出警告(甚至更好,失败)break
?
我意识到有许多有效的用例(并且我经常在我的代码中使用它们),如this question所示,所以显然这样的警告(或失败)需要一个简单的弃权,以便我可以轻松地说,“我愿意想从这里掉下去。”
有没有办法告诉 gcc 这样做?
在http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652上有关于这样一个特性(-Wswitch-break)的讨论。但它似乎还没有实现
此检查在Cppcheck中可用,这是一个用于 C 和 C++ 代码的免费静态分析器。该检查当前标记为“实验性”,因此您需要使用--experimental
命令行开关将其打开。
此检查警告非空 case 子句在没有控制流语句(例如break
, continue
,return
等)的情况下落入下一个 case ,除非有带有诸如// fall through
紧接在 next 之前的措辞的注释case
。
您可以通过查看源代码中的switchFallThroughCase
测试用例来了解此处理的构造类型。
-Wextra
GCC 7 使用or启用了警告-Wimplicit-fallthrough(=[1-5])?
:https ://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/
我刚刚浏览了 gcc 选项,但至少没有一个选项会通知您。有 -Wswitch、-Wswitch-default 和 -Wswitch-enum ( http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options ),但它们都不适合你。
我最好的选择是使用“else if”语句
您可以为 grep/perl/emacs/etc 构建一个正则表达式来查找所有没有break
before的地方case
。
简短的回答是否定的,gcc 中没有这样的标志可以做到这一点。Switch case 更常用于跌倒,这就是为什么在 gcc 中使用这样的标志没有意义。