メインコンテンツ

AUTOSAR C++14 Rule A3-1-1

It shall be possible to include any header file in multiple translation units without violating the One Definition Rule.

説明

ルール定義

It shall be possible to include any header file in multiple translation units without violating the One Definition Rule.

根拠

変数定義または関数定義を含むヘッダー ファイルが複数のインクルード パスに登場する場合、そのヘッダー ファイルは One Definition Rule (定義は 1 度の規則) に違反し、予測できない動作につながる可能性があります。たとえば、ソース ファイルでヘッダー ファイル include.h と別のヘッダー ファイルをインクルードしていて、その別のヘッダー ファイルでも include.h をインクルードしている場合です。

Polyspace 実装

ルール チェッカーは、ヘッダー ファイルの変数定義と関数定義にフラグを設定します。

Polyspace® は、ヘッダー ファイル内のこのルールの違反を報告します。非ヘッダー ソース ファイルでは、このルールの違反が報告されません。

トラブルシューティング

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

すべて展開する

この例では、Polyspace は、変数定義と関数定義がヘッダー ファイル header.hpp 内で行われている場合に、このルールの違反を報告します。


// header.hpp
#include <cstdint>
void F1();        // Compliant
extern void F2(); // Compliant
void F3()         // Noncompliant
{
}
static inline void F4()
{
} // Compliant
template <typename T>
void F5(T) // Compliant
{
}
std::int32_t a;                       // Noncompliant
extern std::int32_t b;                // Compliant
constexpr static std::int32_t c = 10; // Compliant
namespace ns
{
    constexpr static std::int32_t d = 100; // Compliant
    const static std::int32_t e = 50;      // Compliant
    static std::int32_t f;                 // Noncompliant
    static void F6() noexcept;             // Noncompliant
}


//source.cpp
#include "header.hpp"
void foo()
{
	//...
}

チェック情報

グループ: 基本概念
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入