switch case の break がありません
switch ステートメントの case ブロックが break、[[fallthrough]]、または説明コメントで終了していない
説明
この欠陥は、switch ステートメントの case ブロックが break、[[fallthrough]]、または説明コメントで終了していない場合に発生します。
case ブロックの最後のエントリがコード コメントの場合の例:
switch (wt)
{
case WE_W:
do_something_for_WE_W();
do_something_else_for_WE_W();
/* fall through to WE_X*/
case WE_X:
...
}リスク
switch case に break ステートメントがないと、次の switch case が実行されます。この動作が意図的でない場合、switch case のコードが意図せず実行され、switch が予期しない結果で終わる可能性があります。
修正方法
break ステートメントを忘れた場合は、switch case の末尾に追加します。
強調表示された switch case を break しない場合は、コードにコメントを追加して、この case に続いて次の case が実行される理由を示します。このコメントにより、結果から欠陥が削除され、コードの保守が容易になります。
テンプレート関数の場合など、欠陥チェッカーが case ステートメントの末尾にあるコメントを無視することがあります。意図的に次の case まで続行することを、より明確に示す方法として、以下の fallthrough 属性のいずれかを使用する方法があります。(可能な場合)
[[fallthrough]]:C++17 以降で使用できます。[[gnu::fallthrough]]および[[clang::fallthrough]]: GCC コンパイラと Clang コンパイラで使用できます。__attribute__((fallthrough)):GCC コンパイラで使用できます。
例
結果情報
| グループ: 適切な手法 |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: MISSING_SWITCH_BREAK |
| 影響度: Low |