如何让gcc / clang警告switch语句中缺少中断

时间:2012-01-10 19:17:12

标签: gcc coding-style switch-statement clang gcc-warning

有没有办法让gccclang警告switch语句中缺少中断?

具体来说,我几乎总是希望case语句以break结束,如果不这样的话,我可以让编译器抱怨。如果它会寻找中断声明或“//直通”评论,那就更好了。

人们使用不同的解决方案来帮助自己不要搞砸了吗?

3 个答案:

答案 0 :(得分:10)

使用Clang主干,使用-Wimplicit-fallthrough。如果您使用的是C ++ 11,则可以使用[[clang::fallthrough]];语句标记有意的直通(有关此属性,请参阅the documentation以获取更多信息)。警告(尚未)检查“通过”评论。这个功能将不会出现在即将发布的Clang 3.1版本中,但它(可能!)将在3.2版本中。

编辑:Clang的属性现在是C ++ 17的一部分,名称为[[fallthrough]];

答案 1 :(得分:3)

据我所知,这仍然是gcc中未指定的功能请求。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7652

答案 2 :(得分:2)

你问过,如果要查找中断语句或“//直通”评论会很棒。

还记得Henry Spencer的第一个 Ten Commandments for C programmers 吗?

1。你经常运行lint

看起来你需要的是PC-Lint / flexelint。这是警告616:

  

616控制流入大小写/默认 - 可以流动   控制落入案例陈述或默认陈述   以上。这是故意还是程序员忘了插入一个   休息声明?如果这是故意的,那么发表评论   紧接在标记为:

的语句之前
case 'a': a = 0;
   /* fall through */
case 'b': a++;