メインコンテンツ

AUTOSAR C++14 Rule M6-4-6

The final clause of a switch statement shall be the default-clause

説明

ルール定義

The final clause of a switch statement shall be the default-clause.

根拠

switch ステートメントの最終句として default 句を常に使用することは、適切な防御的プログラミング手法です。default 句は、適切なアクションを実行するか、または default 句がアクションを実行しない理由に関するコメントを含んでいなければなりません。

Polyspace 実装

ルール チェッカーは、最終句として default 句が使用されていない switch ステートメントを検出します。

ルール チェッカーは、switch の変数が有限個の値をもつ列挙で、各値に対して case 句がある場合、違反を報告しません。次に例を示します。

enum Colors { RED, BLUE, YELLOW } color;

switch (color) {
      case RED:
        break;
      case BLUE:
        break;
      case YELLOW:
        break;
}

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

Polyspace は、この例の両方の switch ステートメントに非準拠としてフラグを設定します。

  • switch (i) に複数の case ステートメントが含まれている。ただし、i が 0、1、2 以外の任意の値であるケースを処理する default 句がない。i が取ることができる値が 0、1、2 のみである場合でも、default 句を使用することは、i が予期しない異なる値を取る状況をキャッチする防御的プログラミング手法です。

  • switch (colors) が変数 switch に列挙を使用する。ただし、各値に関連付けられている case 句がない。case BLUEcase 句を追加すると、switch ステートメントは準拠となります。

#include <cstdint>

int main(){
    int i;
	
	switch (i)		//Noncompliant
	{
	case 0:
		break;
	case 1:
	case 2:
		break;
	}

	enum Colors { RED, BLUE, YELLOW } colors;

	switch (colors) {	//Noncompliant
	case RED:
		break;
	case YELLOW:
		break;
	}
	
	return 0;
}

チェック情報

グループ: ステートメント
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入