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



有什么方法可以让gccclang警告switch语句中缺少中断吗?

具体来说,我几乎总是希望case语句以break结尾,如果我不这样做,我可以让编译器抱怨,那就太好了。如果它能寻找一个中断声明或"//失败"评论,那就更好了。

有没有一种不同的解决方案可以帮助人们不把事情搞砸?

对于Clang trunk,使用-Wimplicit-fallthrough。如果您使用的是C++11,可以用[[clang::fallthrough]];语句标记有意的失败(有关更多信息,请参阅该属性的文档)。该警告(尚未)检查"失败"评论。这个功能不会出现在即将发布的Clang 3.1版本中,但(可能!)会出现在3.2版本中。

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

据我所见,这仍然是gcc中未分配的特性请求。

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

您问,如果它能查找break语句或"//fall-through"注释,那就太好了。

还记得Henry Spencer的《C程序员十诫》中的第一条吗?

1.你应该经常运行皮棉

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

616控制流入case/default--控件落入case语句或默认语句中在上面这是故意的还是程序员忘记插入break语句?如果这是故意的,请发表评论紧接在被标记为的声明之前

case 'a': a = 0;
   /* fall through */
case 'b': a++;

最新更新