メインコンテンツ

AUTOSAR C++14 Rule A7-1-9

A class, structure, or enumeration shall not be declared in the definition of its type

説明

ルール定義

クラス、構造体、列挙値は、その型の定義の中で宣言されてはなりません。

根拠

このルールは、オブジェクトの型の定義と同じステートメントでオブジェクトの宣言を行うことを禁止しています。たとえば、以下のステートメントでは構造体の Record 型を定義すると同時に、その型のオブジェクトも定義しています。

struct Record {
    std::uint32_t* elems;
    std::uint8_t size;
} someRecord;
エンティティの型を定義しているステートメントで同時にエンティティを定義すると、開発者とレビュー担当者を混乱させる可能性があります。

Polyspace 実装

ルール チェッカーは、オブジェクトの型の定義と同じステートメントでオブジェクトが定義されている場合に、違反を報告します。

トラブルシューティング

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

すべて展開する

#include <cstdint>
struct Record
{
    std::uint32_t* elems;
    std::uint8_t size;
} someRecord; //Noncompliant

typedef struct Item
{
    std::uint32_t* elems;
    std::uint8_t size;
} Item;

Item someItem; //Compliant

この例は、ルールに準拠していないオブジェクト定義と準拠しているオブジェクト定義を示しています。

  • オブジェクト someRecord は、その struct Record 型の定義と同じステートメントで定義されています。したがって、このオブジェクト定義はルールに違反します。

  • オブジェクト someItem は、その struct Item 型の定義とは別のステートメントで定義されています。したがって、このオブジェクト定義はルールに違反していません。

チェック情報

グループ: 宣言
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入