AUTOSAR C++14 Rule A2-10-4
The identifier name of a non-member object with static storage duration or static function shall not be reused within a namespace
説明
ルール定義
The identifier name of a non-member object with static storage duration or static function shall not be reused within a namespace.
根拠
名前空間を使用して、それぞれの名前空間内で宣言する識別子のスコープを絞り込みます。これにより、あるスコープ内の識別子が別のスコープ内の同一の識別子と間違われなくなります。同じ名前空間内の静的ストレージ存続期間が設定された識別子を複数のソース ファイルで再利用すると、識別子を区別できなくなる可能性があります。
Polyspace 実装
識別子を再利用すると、Polyspace® が、同じ翻訳単位内にある識別子の最後の使用にフラグを設定します。識別子が異なるファイルに入っている場合は、アルファベット順で最後のファイル パス内の識別子にフラグが設定されます。
ただし、識別子を再利用しても、その識別子の 1 つのインスタンスのみをキーワード
staticを使用して宣言すると、識別子が宣言される順序に関係なく、その宣言された識別子にフラグが設定されます。ある名前空間内で一つの識別子を宣言し、その識別子を同じ名前空間内で再使用したとしても、それが入れ子になった名前空間内またはインライン化された名前空間内である場合には Polyspace は違反を報告しません。たとえばこのコード スニペットでは、
reusedVarに対して違反は報告されません。//file1.cpp namespace foo { static int reusedVar; //resuedVar has static storage duration } //file2.cpp namespace foo { void func(); namespace nested_foo { float reusedVar; } inline namespace inlined_foo { char reusedVar; } }
このチェッカーは、次のような未使用のコードでは起動されません。
インスタンス化されていないテンプレート
呼び出されない関数
staticまたはextern呼び出されない未定義のローカル関数
未使用の型および変数
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 構文規則 |
| カテゴリ: Required、Automated |
バージョン履歴
R2020b で導入