MISRA C:2023 Dir 4.8
If a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hidden
R2024a 以降
説明
ルール定義
If a pointer to a structure or union is never dereferenced within a translation unit, then the implementation of the object should be hidden 1 .
根拠
構造体または共用体へのポインターがファイル内でデリファレンスされない場合、その構造体または共用体の実装の詳細をそのファイルの翻訳単位内で使用できるようにする必要はありません。構造体メンバーなどの実装の詳細を隠蔽し、意図されていない変更からそれらを保護することができます。
ポインターを介して参照できるがその内容にはアクセスできない不透明な型を定義します。
Polyspace 実装
ファイル内か、ファイルにインクルードされているヘッダー ファイル内で構造体または共用体が定義されていて、そのファイル内でこの構造体または共用体へのポインターが宣言されているが、そのポインターがデリファレンスされることがない場合、チェッカーはコーディング ルール違反にフラグを設定します。構造体または共用体の定義は、このファイルに対して可視であってはなりません。
構造体定義に関するこのルールの違反が表示された場合、同じファイル内か、そのファイルにインクルードされているヘッダー ファイル内でその構造体へのポインターを定義したかどうかを特定します。次に、ファイル内のどこかでポインターをデリファレンスしているかどうかをチェックします。ポインターをデリファレンスしていない場合、構造体定義はこのファイルから隠し、ヘッダー ファイルに含めなければなりません。
構造体のサイズは実行時に変わる可能性があります。翻訳単位内で sizeof() 演算子を使用して構造体のサイズが計算される場合、Polyspace® は、その翻訳単位内に構造体の実装が必要であると仮定します。この構造体の実装が翻訳単位内に存在する場合、Polyspace は違反を報告しません。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: Code design |
| カテゴリ: 推奨 |
| 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.