MISRA C++:2008 Rule 6-4-3
A switch statement shall be a well-formed switch statement.
説明
ルール定義
A switch statement shall be a well-formed switch statement. 1
根拠
C++ 規約の構文ルールの他に、MISRA は適格 switch ステートメントの作成に関する独自の構文ルールを定義しています。この追加の構文ルールにより、switch ステートメントの構造の一貫性が確保されます。
追加の MISRA 構文ルールには以下のものがあります。
| ルール | 構文 |
|---|---|
| switch-statement | switch (condition) {case-label-clause-list default-label-clauseopt} |
| case-label-clause-list | case-label case-clauseopt case-label-clause-list case-label case-clauseopt |
| case-label | case const-expression |
| case-clause | case-block-seqopt case-block-seqopt { statement-seqopt { statement-seqopt |
| default-label-clause | default-label default-clause |
| default-label default-clause | default : case-clause |
| case-block | expression_statement compound_statement selection_statement iteration_statement try_block |
| case-block-seq | case-block case-block-seq case-block |
この表の項目の定義は次のとおりです。
switch-label—case-labelまたはdefault-label。case-clause— 任意の 2 つのswitch-labelsで囲まれたコード。default-clause—default-labelからswitchステートメントの終わりまでの間のコード。switch-clause—case-clauseまたはdefault-clause。
MISRA C++ switch 構文ルールは、次のステートメントを含まないものの、switch-clause ステートメントの本体を形成する複合ステートメント内でこれらを使用することを許可します。
labelled_statementjump_statementdeclaration_statement
Polyspace 実装
ルール チェッカーは、次の場合に違反を報告します。
switchステートメントと最初のcaseステートメントの間に別のステートメントが発生する。次に例を示します。
switch(ch) { int temp; case 1: break; default: break; }switchブロック内にラベルまたはgotoやreturnなどのジャンプ ステートメントが発生する。すべてのブロックの外の
caseステートメント内で変数を宣言している。次に例を示します。
switch(ch) { case 1: int temp; break; default: break; }
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Statements |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.