提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:郑恭琳|2020-08-26 16:24:00.403|阅读 449 次
概述:PC-lint Plus为MISRA C 2004编码指南提供了实质性支持。通过将对au-misra2.lnt文件(随PC-lint Plus分发)的引用添加到PC-lint Plus配置文件中,可以轻松完成对MISRA C 2004兼容性的检查。该文件启用与MISRA C 2004指南相对应的消息,并将文本添加到已发出的消息中,以指定与每个适用消息相关的规则。au-misra2.lnt文件是使用标准PC-lint Plus选项语法的,易于阅读的纯文本配置文件,可以轻松地对其进行修改以满足任何单个项目的需求。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
PC-lint Plus为MISRA C 2004编码指南提供了实质性支持。通过将对au-misra2.lnt文件(随PC-lint Plus分发)的引用添加到PC-lint Plus配置文件中,可以轻松完成对MISRA C 2004兼容性的检查。该文件启用与MISRA C 2004指南相对应的消息,并将文本添加到已发出的消息中,以指定与每个适用消息相关的规则。au-misra2.lnt文件是使用标准PC-lint Plus选项语法的,易于阅读的纯文本配置文件,可以轻松地对其进行修改以满足任何单个项目的需求。PC-lint Plus随附的参考手册包括一个支持矩阵,详细列出了每个指南的支持级别以及每个指南的支持机制。
考虑以下示例,其中包含许多MISRA C 2004违规:
typedef short int16_t; typedef int int32_t; typedef unsigned short uint16_t; int32_t calc(uint16_t id_1, uint16_t id_2, int16_t *idl, uint16_t idl_size); int32_t calc(uint16_t id_1, uint16_t id_2, int16_t *idl, uint16_t idl_size) { if (idl_size && id_1 < idl_size && id_2 < idl_size) return idl[id_1] * idl[id_2] + idl[id_1]; return 0; }
当使用PC-lint Plus分析此示例时,报告的MISRA C 2004违规包括(其中包括):
904: return statement before end of function 'calc' [MISRA 2004 Rule 14.7, required]
return idl[id_1] * idl[id_2] + idl[id_1];
^
9012: body should be a compound statement [MISRA 2004 Rule 14.8, required],
[MISRA 2004 Rule 14.9, required]
return idl[id_1] * idl[id_2] + idl[id_1];
^
9050: dependence placed on operator precedence (operators '&&' and '<') [MISRA
2004 Rule 12.1, advisory]
if (idl_size && id_1 < idl_size && id_2 < idl_size)
^ ~~~~
9240: right side of logical operator '&&' is not a primary expression [MISRA
2004 Rule 12.5, required]
if (idl_size && id_1 < idl_size && id_2 < idl_size)
^ ~~~~~~~~~~~~~~~
9232: expected an effectively boolean argument for operator && [MISRA 2004 Rule
12.6, advisory]
if (idl_size && id_1 < idl_size && id_2 < idl_size)
~~~~~~~~ ^
9226: integral expression of underlying type 'int16_t' (aka 'short') cannot be
implicitly converted to type 'int32_t' (aka 'int') because it is a return
expression [MISRA 2004 Rule 10.1, required]
return idl[id_1] * idl[id_2] + idl[id_1];
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9050: dependence placed on operator precedence (operators '+' and '*') [MISRA
2004 Rule 12.1, advisory]
return idl[id_1] * idl[id_2] + idl[id_1];
~ ^
9264: array subscript applied to variable 'idl' declared with non-array type
'int16_t *' (aka 'short *') [MISRA 2004 Rule 17.4, required]
return idl[id_1] * idl[id_2] + idl[id_1];
^~~
818: parameter 'idl' of function 'calc(uint16_t, uint16_t, int16_t *, uint16_t)'
could be pointer to const [MISRA 2004 Rule 16.7, advisory]
int32_t calc(uint16_t id_1, uint16_t id_2, int16_t *idl, uint16_t idl_size) {
报告的每项违规都包括发生违规的位置、消息号和基本问题的文字描述,以及违反的MISRA C 2004规则。例如,在消息中:
9012: body should be a compound statement [MISRA 2004 Rule 14.8, required],
[MISRA 2004 Rule 14.9, required]
return idl[id_1] * idl[id_2] + idl[id_1];
^
9012是PC-lint Plus消息号,此消息的文本为“正文应为复合语句”。违反的MISRA规则包含在消息文本末尾的方括号中。接下来的两行显示了与消息关联的上下文和位置。
《PC-lint Plus参考手册》包含每条消息的说明,并经常提供可用于解决问题的其他指导。此信息也可以显示在命令行上。例如,要显示消息818的描述,请使用选项-help=818运行PC-lint Plus,以使PC-lint Plus显示以下内容:
举个例子:
int f( int *p ) { return *p; }
可以重新声明为:
int f( const int *p ) { return *p; }
将参数声明为const指针可提供仅指针没有的优点。特别是,您可以将const数据项的地址传递给此类参数。
此外,它可以提供更好的文档。消息952、953、954和1764中介绍了可将const添加到声明中的其他情况。
有关指定规则的信息,请查阅MISRA C 2004指南文档。
重写上面的calc函数以解决所报告的违规的一种方法是:
int32_t calc2(uint16_t id_1, uint16_t id_2, const int16_t id_list[], uint16_t idl_size); int32_t calc2(uint16_t id_1, uint16_t id_2, const int16_t id_list[], uint16_t idl_size) { int32_t result = 0; if ((idl_size > 0U) && (id_1 < idl_size) && (id_2 < idl_size)) { result = ((int32_t)id_list[id_1] * id_list[id_2]) + id_list[id_1]; } return result; }
偏差是源代码中的实例,其中已检查违反规则并认为可以接受。MISRA C 2004文档包含咨询和必需的规则。与必要规则的偏离通常涉及正式的批准流程,而与咨询规则的偏离则可能没有。虽然偏差过程的细节因项目而异,但是可以使用非常灵活的抑制机制在PC-lint Plus中配置偏差。当引用特定的符号或类型时,或在特定的行上时,可以通过多种方式来抑制大多数消息,例如在文件、函数或语句中。某些类型的抑制在源代码中以特殊注释的形式表示,但大多数不是。
例如,MISRA 2004 Rule 16.7(上面由消息818报告)是一种咨询规则,建议在可能时将指针参数声明为指向const的指针。可以使用选项-efunc(818,calc)抑制函数calc的此消息,该选项可以作为特殊注释放置在项目配置文件或源代码中。可以以相同的方式抑制来自此功能内的其他消息。评论可以遵循抑制选项,其中可能包括基本原理或形式偏差信息。
PC-lint Plus区分库代码(默认情况下包括外部和系统头,但可以自定义以包括头和模块的任何子集)和项目代码。默认情况下,PC-lint Plus将同时检查库代码和项目代码是否符合MISRA C2004。通常希望将检查范围限制为项目代码,这很容易在引用au-misra3.lnt文件后,通过使用选项-wlib=4 -wlib=1来重置库警告级别来完成。也可以使用-elib和+elib选项轻松地为库代码启用或禁用单个消息。
相关推荐:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
本文将深入探讨HOOPS对B-Rep的支持,以及它如何为开发者和设计师提供精准且高效的三维建模体验。
.NET应用UI框架DevExpress XAF v24.2即将在近期更新,新版本官宣.NET Core / .NET增强,欢迎加入社群及时获取最新信息!
在3D工程领域,保持领先地位至关重要。随着CAD行业的不断演变,以下是我们预计在未来几年将塑造行业的五个关键趋势,以及HOOPS SDK如何助力这些变革。
VMProtect 是强软件保护系统,代码转虚拟机字节码,多编译类型,依复杂原理护码,广适多领域,保安全与知产,今天就跟随小编一起了解下该软件在多场景下的软件保护应用
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢