提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|行业资讯|编辑:郑恭琳|2020-08-27 10:30:42.720|阅读 495 次
概述:PC-lint Plus 1.3支持许多CERT C的静态可执行准则。通过在现有配置中添加对au-certc.lnt文件(随PC-lint Plus分发)的引用,可以轻松实现对CERT C的检查。该文件启用与CERT C准则相对应的消息,并将文本添加到已发布的消息中,以指定与每个适用消息关联的规则。au-certc.lnt文件是使用标准PC-lint Plus选项语法的,易于阅读的纯文本配置文件,可以轻松地对其进行修改以满足任何单个项目的需求。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
PC-lint Plus 1.3支持许多CERT C的静态可执行准则。通过在现有配置中添加对au-certc.lnt文件(随PC-lint Plus分发)的引用,可以轻松实现对CERT C的检查。该文件启用与CERT C准则相对应的消息,并将文本添加到已发布的消息中,以指定与每个适用消息关联的规则。au-certc.lnt文件是使用标准PC-lint Plus选项语法的,易于阅读的纯文本配置文件,可以轻松地对其进行修改以满足任何单个项目的需求。
PC-lint Plus随附的参考手册包括一个支持矩阵,详细列出了每个指南的支持级别以及每个指南的支持机制。
考虑以下示例:
#include <stdio.h> extern void logger(const char *); #define LOG(x) logger(#x) void copy(FILE *fp_in, FILE *fp_out, int count) { char buf[100]; int bytes = 0; while (bytes < count) { int bytes_read = fread(buf, 1, 100, fp_in); if (!bytes_read) { break; } fwrite(buf, 1, bytes_read, fp_in); LOG(bytes = bytes + bytes_read); } }
当使用PC-lint Plus分析此示例时,报告的CERTC违规包括(其中包括):
warning 2479: attempt to perform write operation on stream after read without
an intervening reposition [CERT C Rule FIO39-C]
fwrite(buf, 1, bytes_read, fp_in);
^
supplemental 831: stream was read here
int bytes_read = fread(buf, 1, 100, fp_in);
^
note 901: variable 'buf' of type 'char [100]' not initialized by definition
[CERT C Rule EXP33-C]
char buf[100];
^
warning 2666: expression with side effects passed to unexpanded parameter 1 of
macro 'LOG': parameter is only used with #/## operators [CERT C Rule PRE31-C]
LOG(bytes = bytes + bytes_read);
^
报告的每个违规都包括发生违规的位置、消息号和有关基本问题的文字描述,以及违反的CERT C规则。
《PC-lint Plus参考手册》包含每条消息的说明,并经常提供可用于解决问题的其他指导。此信息也可以显示在命令行上。例如,要显示消息2666的描述,请运行带有选项-help=2666的PC-lint Plus,以使PC-lint Plus显示以下内容:
当调用类似函数的宏并带有一个参数时发出此消息,该参数看起来好像在进行评估时会产生副作用,但是由于相应的参数未在宏定义中扩展,因此不会发生副作用。例如:
#define DEBUG_VAL(x) int process(int i) { DEBUG_VAL(++i); // 2666 - increment doesn't occur /* ... */ return i; }
由于未扩展参数,因此不会评估++i,并且不会发生增量,这可能是意外的。如果意图是不管宏如何定义都发生副作用,则应将引起副作用的表达式放在宏调用之外。就此消息而言,任何看起来包含函数调用的表达式都被认为具有副作用。
详细信息是“扩展中未引用参数”或“仅与#/##运算符一起使用参数”之一。可以使用-estring基于detail参数的值来禁止显示该消息。
可以查阅CERT C准则文档以获取有关指定规则的信息。
2666标识的问题是一个错误,应通过将分配移至LOG宏的调用之外来进行纠正。
2479识别的问题不仅是违反规则,而且是错误,该文件指针被意外地用于读取和写入同一文件,这导致了未定义的行为,因为没有中间的重新定位操作。解决方案是在对fwrite的调用中将fp_in更改为fp_out。
向buf添加一个初始化程序:
char buf[100] = {0};
解决了901报告的问题(并将阻止在以后的运行中发布901)。
偏差是指源代码中违反规则的情况被视为可接受的实例。虽然偏差过程因项目而异,但可以使用非常灵活的抑制机制在PC-lint Plus中配置偏差。当引用特定的符号或类型时,或在特定的行上时,可以通过多种方式来抑制大多数消息,例如在文件,函数或语句中。某些类型的禁止操作要求在源代码中添加注释,但大多数不需要。
例如,消息901报告了违反CERT C规则EXP33-C(建议在变量的定义中初始化变量)的情况,该消息始终在消息中包含变量的名称。要为名为buf的变量抑制消息901,可以使用选项-esym(901,buf)。要在函数副本内的任何位置禁止显示该消息,可以使用选项-efunc(901,copy)。适当的抑制选项将添加到项目的配置文件中,或在源代码中包含问题定义的棉绒注释中。评论可以遵循此选项,也许带有与正式偏离政策相关的信息,例如-esym(901,buf)“EXP33-C的偏差”。
PC-lint Plus区分库代码(默认情况下包括外部和系统头,但可以自定义以包括头和模块的任何子集)和项目代码。默认情况下,PC-lint Plus会同时检查库代码和项目代码是否符合CERTC。通常希望将检查范围限制为项目代码,这很容易在引用au-misra3.lnt文件后,通过使用选项-wlib=4 -wlib=1来重置库警告级别来完成。也可以使用-elib和+elib选项轻松地为库代码启用或禁用单个消息。
相关推荐:
《PC-lint Plus参考手册》中涉及SEI版权材料和PC-lint Plus配置文件以进行SEI CERT C检查的章节包含“SEI CERT C编码标准维基”的部分内容,版权所有©1995-2018卡内基梅隆大学,并经其软件特别许可工程学院。卡内基梅隆大学或其软件工程学院未曾审查或认可过上述材料以及由Gimpel Software LLC生产或出版的任何其他材料。有关更多信息,请参见《PC-lint Plus参考手册》中的“致谢”一章。
®CERT是卡耐基梅隆大学的注册商标
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
通过提供强大的3D CAD数据访问工具并适用于桌面、移动和Web的高级环境3D可视化发动机,HOOPS在提升造船设计和制造流程的效率方面发挥了重要作用。
HOOPS Luminate在汽车行业中的应用具有广泛的潜力和深远的影响。它通过提供高效的3D可视化、虚拟装配与拆解、性能分析、客户定制等功能,帮助汽车制造商在设计、生产和销售过程中提升效率、降低成本并提高产品质量。
在不断发展的软件开发世界中,使工具和框架与最新的平台版本保持同步至关重要,欢迎查阅~
全球航运业对国际贸易至关重要,全球 90% 以上的商品通过海运运输。准确监控和控制这些集装箱的移动对于维持高效的供应链至关重要。手动输入集装箱号码是这一程序的关键部分,它带来了相当大的挑战,例如人为错误和效率低下。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢