MISRA C:2012 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
描述
规则定义
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 不会报告违规。
故障排除
如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示。
示例
检查信息
组:代码设计 |
类别:建议 |
AGC 类别:建议 |
版本历史记录
在 R2018a 中推出
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.