有没有办法让gcc
或clang
警告switch语句中缺少中断?
具体来说,我几乎总是希望case语句以break结束,如果不这样的话,我可以让编译器抱怨。如果它会寻找中断声明或“//直通”评论,那就更好了。
人们使用不同的解决方案来帮助自己不要搞砸了吗?
答案 0 :(得分:10)
使用Clang主干,使用-Wimplicit-fallthrough
。如果您使用的是C ++ 11,则可以使用[[clang::fallthrough]];
语句标记有意的直通(有关此属性,请参阅the documentation以获取更多信息)。警告(尚未)检查“通过”评论。这个功能将不会出现在即将发布的Clang 3.1版本中,但它(可能!)将在3.2版本中。
编辑:Clang的属性现在是C ++ 17的一部分,名称为[[fallthrough]];
。
答案 1 :(得分:3)
据我所知,这仍然是gcc中未指定的功能请求。
答案 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++;