メインコンテンツ

AUTOSAR C++14 Rule A0-1-6

There should be no unused type declarations

説明

ルール定義

未使用の型の宣言があってはなりません。

根拠

型を宣言してもそれを使用しない場合、コードをレビューする際に、その型が冗長なのか手違いで使用されていないのかを判断できません。

たとえば、一部の特殊なデータを格納するために列挙データ型を宣言したが、整数型を使用してそのデータを格納した場合、未使用の型はコーディング エラーを示す可能性があります。

Polyspace 実装

Polyspace® は、未使用のローカル型がコードに含まれている場合にこのルールの違反を報告します。

例外として、テンプレート クラスで public アクセスを使用して未使用の型を定義している場合、Polyspace は違反を報告しません。

トラブルシューティング

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

すべて展開する

この例では、列挙型 switchValue を使用していません。この型を宣言したのに使用していないため、Polyspace は違反を報告します。

enum switchValue {low, medium, high}; //Noncompliant

void operate(int userInput) {
    switch(userInput) {
        case 0: // Turn on low setting
                 break;
        case 1: // Turn on medium setting
                 break;
        case 2: // Turn on high setting
                 break;
        default: // Return error
    }
}

おそらく、その意図は次のように switch の入力としてこの型を使用することだったのでしょう。

enum switchValue {low, medium, high}; //Compliant

void operate(switchValue userInput) {
    switch(userInput) {
        case low: // Turn on low setting
                   break;
        case medium: // Turn on medium setting
                     break;
        case high: // Turn on high setting
                   break;
        default: // Return error
    }
}

あるパブリック typedef がテンプレート自体では使用されないとしても、テンプレートのクライアントによって使用されるそのパブリック typedef を、テンプレート クラスの開発の際に宣言する場合があります。このような場合、パブリック typedef がテンプレートで未使用のままであっても、Polyspace は違反を報告しません。たとえば、次のコードでは Polyspace は未使用の T* 型について違反を報告しません。

template<typename T>
  class myContainerIterator {
    public:
      using pointer = T*;              // Compliant
      typedef T* Pointer;              // Compliant

    //...
  };

チェック情報

グループ: 言語に依存しない問題
カテゴリ: Advisory、Automated

バージョン履歴

R2019a で導入

すべて展開する