pc-lint的配置也是個麻煩事,好在網上介紹的文章很多,讓pc-lint轉起來應該不難。
我的做法是解壓pc-lint包到任意目錄,然後從lnt目錄中copy一個配置文件模板,即std.lnt文件到pc-lint根目錄下。修改這個文件,爲該文件出現的文件引用指定完整路徑,在我的機器上是這個樣子的:
d:\pclint\lnt\au-sm.lnt
d:\pclint\lnt\au-ds.lnt
d:\pclint\lnt\au-misra.lnt
d:\pclint\lnt\co-gnu3.lnt
接下來還要指定頭文件的目錄,找到Code::Blocks目錄下的include子目錄的位置,添加上去即可,我使用的是:
-i"c:\program files";"C:\Program Files\CodeBlocks\MinGW\include"
最前面-i的用法和makefile中的是一樣的。
針對個人的使用習慣,可能還有一些特殊配置,建議都放到options.lnt文件中,所以在std.lnt中還要加上:
d:\pclint\options.lnt -si4 -sp4
我使用的options.lnt文件是這樣子的:
-wlib(0)
-e829
-e970
-e726
-e956
-esym(960, 69)
完成上面的配置後,就可以使用pc-lint對代碼進行檢查了。先在命令行中試驗下:
lint-nt.exe -u d:\pclint\std.lnt test.c
果然能看到很多信息出現,包括警告和錯誤。比較奇怪的是居然提示找不到stddef.h,這怎麼可能。查看stdio.h,它明明就是直接include stddef.h的,如果真找不到,就不可能通過Code::Blocks的編譯了。
但是,我在C:\Program Files\CodeBlocks\MinGW\include搜索,竟然真的找不到此文件。真是奇怪!
先不管這麼多,自己添加一個空的stddef.h文件好了,這樣總算能騙過pc-lint了:-)。
不過pc-lint又開始抱怨NULL未定義。我決定使用Code::Blocks編譯試試,更奇怪的是,竟然沒法編譯通過,出現了一大堆錯誤。但是我把stddef.h刪掉就可以了。
看來Code::Blocks還是有這個文件的,就是不知藏哪了。這個簡單,直接在Code::Blocks目錄下搜索,終於讓我在C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\3.4.5\include目錄把它找出來了。接下的問題就簡單啦,把這個添加到std.lnt的-i行後即可:
-i"c:\program files";
"C:\Program Files\CodeBlocks\MinGW\include";
"C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\3.4.5\include"
這樣使用起來就一切正常啦,接下來,就是--去除那些警告吧。