2012-01-10 12 views
6

gccまたはclangにswitchステートメントのブレークがないことを警告する方法はありますか?スイッチステートメントで欠落していることをgcc/clangに警告する方法

具体的には、ほとんどの場合、大文字小文字のステートメントが改行で終了するようにしたいと思います。それがbreakステートメントか "// fall through"コメントのどちらかを探すのであれば、さらに良いでしょう。

この問題を解決するのに役立つさまざまなソリューションがありますか?

+0

[switch/case文を途切れないようにgccに警告(または失敗)する方法はありますか?](http://stackoverflow.com/questions/7703358/how-can-i-tell-gcc) -to-warn-or-fail-on-switch-case-statements-without-a-break) –

答えて

9

を、-Wimplicit-fallthroughを使用しています。 C++ 11を使用している場合は、意図的なフォールスルーに[[clang::fallthrough]];というステートメントを付けることができます(詳細については、この属性の場合はthe documentationを参照してください)。警告は(まだ)「落ちる」コメントをチェックしません。この機能は、Clangの今後の3.1リリースには含まれませんが、3.2に含まれます(おそらく!)。

編集: Clangの属性は、[[fallthrough]];という名前でC++ 17の一部になりました。

+0

この機能をhttp://llvm.org/viewvc/llvm-project?view=rev&revision=でチェックしたことがあります156086。ありがとう! Alexander Kornienkoに感謝します! – sligocki

+1

アレクサンダーはここですべての功績に値する。私がしたのはそれを見直すことだけだった。 :) –

+1

C++ 17に[fallthrough]属性が追加されました。 –

2

あなたはそれがコメント「を通じて//秋」break文またはいずれかを探しますならば、それは素晴らしいことだろうと尋ねました。

ヘンリースペンサーの最初のメッセージです。Ten Commandments for C programmersを覚えていますか?

1.汝の実行lintは頻繁に

それはあなたのPC-Lintの/ flexelintで必要なもののように見えます。ここで警告616さ:

616コントロールは、ケース/デフォルトに流入 - 制御の流れは、case文以上 からdefault文に分類することが可能です。これは意図的なのでしょうか、プログラマは break文を挿入するのを忘れましたか?これは意図的だった場合、その後のようにフラグが付けられた文の直前にコメント を置く:クラントランクに

case 'a': a = 0; 
    /* fall through */ 
case 'b': a++; 
関連する問題