有人問:代碼中類似/*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這個工具,還需要掌握更多相關規則、配置。
-
C語言
+關注
關注
180文章
7575瀏覽量
134123 -
代碼
+關注
關注
30文章
4671瀏覽量
67770 -
MDK
+關注
關注
4文章
207瀏覽量
31922
發布評論請先 登錄
相關推薦
評論