如何解决MISRA-C 2012 规则8.7违规问题
MISRA C 2012 规则8.7违规处理方案
MISRA C 2012 规则8.7为必选规则,核心要求是:仅当函数或对象需要在定义它的翻译单元之外被访问时,才允许声明为外部链接。你遇到的报错是因为
cpvqResponse函数声明为外部链接,但实际仅在单个.c文件(翻译单元)内被调用,不符合规则要求。
可根据实际业务场景选择以下处理方案:
- 改为内部链接
这是最常用的合规方案,直接在函数的声明和定义前添加static关键字,将其改为仅当前翻译单元可访问的内部链接属性即可。
代码修改示例:
注意:如果该函数此前的声明放在公共头文件中,需要将该声明从头文件中移除,仅保留在当前.c文件的头部。// 修改前(外部链接) void cpvqResponse(uint8_t cmdType); void cpvqResponse(uint8_t cmdType) { // 函数实现逻辑 } // 修改后(内部链接) static void cpvqResponse(uint8_t cmdType); static void cpvqResponse(uint8_t cmdType) { // 函数实现逻辑 } - 合规豁免
如果后续规划中其他翻译单元需要调用该函数,可按照项目的MISRA合规管理流程,对该函数的规则8.7违规添加书面说明的豁免标注,即可消除静态检查报错。 - 删除冗余函数
如果经排查确认该函数没有被任何位置调用,属于冗余代码,直接删除该函数即可解决报错。
内容的提问来源于stack exchange,提问作者Sharon Deborah
相关产品推荐
相关产品推荐

