MISRA C:2023 Rule 8.5
An external object or function shall be declared once in one and only one file
R2024a 以降
説明
ルール定義
An external object or function shall be declared once in one and only one file 1 .
根拠
ヘッダー ファイル内で識別子を宣言すると、その識別子が定義または使用される任意の翻訳単位にそのヘッダー ファイルをインクルードできます。ヘッダー ファイル内で宣言をモジュール化すると、以下の整合性を維持するうえで役立ちます。
宣言と定義。
異なる翻訳単位での宣言。
このルールは、ヘッダー ファイル内で外部オブジェクトまたは関数を宣言する手法を強制します。
Polyspace 実装
ルール チェッカーでは、明示的および暗黙的な extern 宣言をチェックします (仮定義は無視されます)。チェッカーは、次の変数または関数にフラグを設定します。
ヘッダー ファイル以外で
externと宣言されている複数回宣言されている (たとえば、ヘッダー ファイルで 1 回、ヘッダー ファイル以外で 1 回宣言されているなど)。
このチェッカーは以下のように動作します。
pragma weakや__attribute__((weak))など、コンパイラに固有の移植可能でない方法による関数宣言のオーバーライドを無視する。コードで使用されていない typedef と関数宣言を無視する。
再宣言をルール違反と見なす。たとえば、コードで weak シンボルを宣言してから、後でその記号を再宣言すると、Polyspace® は違反を報告します。このような違反を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: 宣言と定義 |
| カテゴリ: 必要 |
| AGC カテゴリ: 推奨 |
バージョン履歴
R2024a で導入
参考
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.