有什么方法可以让gcc
或clang
警告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++;