AUTOSAR C++14 Rule M6-4-3
A switch statement shall be a well-formed switch statement.
説明
ルール定義
A switch statement shall be a well-formed switch statement.
根拠
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® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: ステートメント |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入