メインコンテンツ

MISRA C++:2008 Rule 3-2-4

An identifier with external linkage shall have exactly one definition

説明

このチェッカーは、既定の Polyspace® as You Code 解析では非アクティブにされますPolyspace as You Code 解析で非アクティブにされるチェッカー (Polyspace Access)を参照してください

ルール定義

An identifier with external linkage shall have exactly one definition 1

根拠

識別子に複数の定義がある、または定義が存在しない場合、未定義の動作につながる可能性があります。

Polyspace 実装

Polyspace

は、以下の条件が 1 つでも満たされた場合に違反を報告します。

  • シンボルの複数の定義または仮定義が指定されている。

  • コード内に未定義のグローバル変数がある。

このチェッカーは、次のような未使用のコードでは起動されません。

  • インスタンス化されていないテンプレート

  • 呼び出されない関数 static または extern

  • 呼び出されない未定義のローカル関数

  • 未使用の型および変数

トラブルシューティング

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

すべて展開する

次の例では次の 2 つのファイルを使用しています。

  • file1.cpp:

    
    typedef signed   int          int32_t;
    
    namespace NS {
    	extern int32_t a; //Noncompliant
    
    	void foo(){
    		a = 0;
    		
    	}
    }; 
  • file2.cpp:

    
    typedef signed   int          int32_t;
    typedef signed   long long         int64_t;
    
    namespace NS {
    	extern int64_t a; //Noncompliant
    	void bar(){
    		++a;
    		
    	}
    };

同じ識別子 a が両方のファイルで定義されています。

チェック情報

グループ: Basic Concepts
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.