有人问:代码中类似/*lint !e750... */代表什么意思?
回答这个问题,就要牵涉到本文说的pc-lint这个工具。
1写在前面
可能有一定编程经验的朋友,应该在一些地方都看到过类似/*lint !e750... */这种“注释”。
但,有多少人去分析过它的含义呢?
比如:在freertos的tasks.c源码中有如下一行语句:
#undef mpu_wrappers_included_from_api_file /*lint !e961 !e750. */
后面/*lint !e961 !e750. */作用就是:在使用pc-lint工具进行静态分析时,隐藏本行宏定义未被调用的“错误”。
换种方式理解:编译时,这条语句不出现警告信息(注意:这里是比喻为编译,其实是pc-lint静态分析)。
2
关于pc-lint
pc-lint 是gimpel software公司开发的c/c++软件代码静态分析工具,它的全称是pc-lint/flexelint for c/c++。
你可以把它看作是一种更加严格的编译器。它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。
c语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外c编译器不进行强制类型检查,也带来了代码编写的隐患。
pc-lint识别并报告c语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码等。
软件除错是软件项目开发成本和延误的主要因素,pc-lint能够帮你在程序动态测试之前发现编码错误,这样消除错误的成本更低。
错误号
pc-lint 能够检查出很多语法错误和语法上正确的逻辑错误,pc-lint 为大部分错误消息都分配了一个错误号:
这些错误号在文档中有详细说明:
命令格式:
更多相关内容可以参考官网:
www.gimpel.com
3
keil支持pc-lint说明
在keil官网有这样一段信息:
x pc-lint is a powerful static analysis tool that will check your c/c++ source code and find bugs, glitches, inconsistencies, non-portable constructs, redundant code, and much more. it looks across multiple modules, and so, enjoys a perspective your compiler does not have.
a c compiler cannot always detect each and every potential problem in your source files.
this is where pc-lint comes in.
supports k&r c, ansi c, and ansi/iso c++ standards
explicit support for misra c and misra c++ (motor industry software reliability association) standards
value tracking of auto and static variables detects subtle initialization and value misuse problems
inter-function value tracking - powerful inter-statement value tracking crosses function boundaries
optional strong type checking (typedef-based) with a rich option set to detect nominal type differences
user-defined semantic checking for function arguments and return values
each of the keil development tools, arm, c51, c251, and c166, support gimpel software's pc-lint. configuration files are included in the keil development tools which enable you to quickly and easily begin using pc-lint in your application development and testing.
http://www.keil.com/pclint
大概意思就是keil(arm, c51, c251, and c166)支持pc-lint,配置文件包含在keil开发工具中,使您能够在应用程序开发和测试中快速轻松地开始使用pc-lint。
还提供了一个例子:
示例代码:
c51编译输出结果:
执行pc-lint输出:
示例程序列表(错误以突出显示),c51编译器输出和pc-lint输出。当pc-lint检测到并报告26个错误和警告时,c51编译器会检测并报告12个错误和警告。
4
mdk中添加pc-lint
要使用pc-lint,大概需要以下两步:
安装pc-lint
mdk添加pc-lint
1.安装pc-lint
pc-lint是一款收费的工具,大家可以网上搜索相关po解版本,相关安装很简单,这里不说明。
2.mdk添加pc-lint
在mdk的帮助文档中,有相关添加和配置说明,我这里也简单说下。
a.菜单tools ->set-up pc-lint进入配置界面(如上图)
b.添加lint-nt.exe
前提需要安装pc-lint,指向安装路径下的lint-nt.exe。点击“...”即可添加(标记1)。
c.添加co-armcc-5.lnt
这个路径是mdk安装目录下面,可参看上图(标记2)。
d.misra规则配置
这里参看帮助文档,选择misra_c_2012_config(标记3)。
e.增加pc-lint命令
例如,要禁止pc-lint输出的info 714消息,可以在此对话框中输入-e714 (标记4)。
当然,本文重点在于引导大家了解pc-lint这个工具,想要运用pc-lint这个工具,还需要掌握更多相关规则、配置。
LED锡膏回流焊注意事项有哪些?
各种PZT薄膜沉积技术及其应用趋势分析
奥拓电子签订新华社子公司亿元合同 今日复牌
为什么现在的发烧友都喜欢头戴式蓝牙无线耳机
抖动与抖动测试的基础知识
关于PC-lint,以及如何在MDK中添加PC-lint工具
一文详解2021版长城炮POER车机
NS3266 PD3.0+USB2.0 HUB二合一芯片 规格书及设计原理图
中国光伏危机四伏,十大巨头负债过千亿
ACM32F403与STM32F405之间的差异对比
基于PCF8583时钟芯片实现电压监测仪测量系统的设计
美国偏远沙漠发现神秘的金属物体,从地上向上长出
QuickLogic VEE技术提升微型投影机影像可视性
早期诊聋防聋诞生中国“芯”
易于实现且全面的3D堆叠裸片器件测试方法
新华三抓住新契机切入路由器市场
物联网创造良好用户体验困难的原因
rc滤波器电阻电容如何选择?
2021年将有两款用后置副屏的手机
在CAM350中进行负片输出