有人問:代碼中類似/*lint !e750... */代表什么意思?
回答這個(gè)問題,就要牽涉到本文說的PC-Lint這個(gè)工具。
1寫在前面
可能有一定編程經(jīng)驗(yàn)的朋友,應(yīng)該在一些地方都看到過類似/*lint !e750... */這種“注釋”。
但,有多少人去分析過它的含義呢?
比如:在FreeRTOS的tasks.c源碼中有如下一行語句:
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */
后面/*lint !e961 !e750. */作用就是:在使用PC-Lint工具進(jìn)行靜態(tài)分析時(shí),隱藏本行宏定義未被調(diào)用的“錯(cuò)誤”。
換種方式理解:編譯時(shí),這條語句不出現(xiàn)警告信息(注意:這里是比喻為編譯,其實(shí)是PC-Lint靜態(tài)分析)。
2
關(guān)于PC-Lint
PC-Lint 是GIMPEL SOFTWARE公司開發(fā)的C/C++軟件代碼靜態(tài)分析工具,它的全稱是PC-Lint/FlexeLint for C/C++。
你可以把它看作是一種更加嚴(yán)格的編譯器。它除了可以檢查出一般的語法錯(cuò)誤外,還可以檢查出那些雖然符合語法要求,但很可能是潛在的、不易發(fā)現(xiàn)的錯(cuò)誤。
C語言的靈活性帶來了代碼效率的提升,但相應(yīng)帶來了代碼編寫的隨意性,另外C編譯器不進(jìn)行強(qiáng)制類型檢查,也帶來了代碼編寫的隱患。
PC-Lint識(shí)別并報(bào)告C語言中的編程陷阱和格式缺陷的發(fā)生。它進(jìn)行程序的全局分析,能識(shí)別沒有被適當(dāng)檢驗(yàn)的數(shù)組下標(biāo),報(bào)告未被初始化的變量,警告使用空指針,冗余的代碼等。
軟件除錯(cuò)是軟件項(xiàng)目開發(fā)成本和延誤的主要因素,PC-lint能夠幫你在程序動(dòng)態(tài)測試之前發(fā)現(xiàn)編碼錯(cuò)誤,這樣消除錯(cuò)誤的成本更低。
錯(cuò)誤號(hào)
PC-Lint 能夠檢查出很多語法錯(cuò)誤和語法上正確的邏輯錯(cuò)誤,PC-Lint 為大部分錯(cuò)誤消息都分配了一個(gè)錯(cuò)誤號(hào):
這些錯(cuò)誤號(hào)在文檔中有詳細(xì)說明:
命令格式:
更多相關(guān)內(nèi)容可以參考官網(wǎng):
www.gimpel.com
3
Keil支持PC-Lint說明
在Keil官網(wǎng)有這樣一段信息:
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開發(fā)工具中,使您能夠在應(yīng)用程序開發(fā)和測試中快速輕松地開始使用PC-Lint。
還提供了一個(gè)例子:
示例代碼:
C51編譯輸出結(jié)果:
執(zhí)行PC-Lint輸出:
示例程序列表(錯(cuò)誤以突出顯示),C51編譯器輸出和PC-Lint輸出。當(dāng)PC-Lint檢測到并報(bào)告26個(gè)錯(cuò)誤和警告時(shí),C51編譯器會(huì)檢測并報(bào)告12個(gè)錯(cuò)誤和警告。
4
MDK中添加PC-Lint
要使用PC-Lint,大概需要以下兩步:
安裝PC-Lint
MDK添加PC-Lint
1.安裝PC-Lint
PC-Lint是一款收費(fèi)的工具,大家可以網(wǎng)上搜索相關(guān)po解版本,相關(guān)安裝很簡單,這里不說明。
2.MDK添加PC-Lint
在MDK的幫助文檔中,有相關(guān)添加和配置說明,我這里也簡單說下。
A.菜單Tools ->Set-up PC-lint進(jìn)入配置界面(如上圖)
B.添加lint-nt.exe
前提需要安裝PC-Lint,指向安裝路徑下的lint-nt.exe。點(diǎn)擊“...”即可添加(標(biāo)記1)。
C.添加co-ARMCC-5.lnt
這個(gè)路徑是MDK安裝目錄下面,可參看上圖(標(biāo)記2)。
D.MISRA規(guī)則配置
這里參看幫助文檔,選擇MISRA_C_2012_Config(標(biāo)記3)。
E.增加PC-Lint命令
例如,要禁止PC-lint輸出的info 714消息,可以在此對(duì)話框中輸入-e714 (標(biāo)記4)。
當(dāng)然,本文重點(diǎn)在于引導(dǎo)大家了解PC-Lint這個(gè)工具,想要運(yùn)用PC-lint這個(gè)工具,還需要掌握更多相關(guān)規(guī)則、配置。
-
C語言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134472 -
代碼
+關(guān)注
關(guān)注
30文章
4674瀏覽量
67818 -
MDK
+關(guān)注
關(guān)注
4文章
207瀏覽量
31940
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論