已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PC Lint培訓(xùn)材料 作者 XXX 目錄 PC Lint簡(jiǎn)介PC Lint基本使用方法PC Lint常用選項(xiàng)PC Lint在各種環(huán)境中的集成PC Lint常見(jiàn)告警分析及解決措施 PC Lint簡(jiǎn)介 PC Lint是GimpelSoftware公司開(kāi)發(fā)的一個(gè)一個(gè)C C 靜態(tài)語(yǔ)法檢查工具 它不是一個(gè)Free軟件 一般來(lái)說(shuō) 軟件在編譯連接通過(guò)后就可以使用PC Lint做靜態(tài)檢查 PC Lint是一個(gè)命令行工具 在8 0版本里提供了300多個(gè)選項(xiàng) 1000多個(gè)告警 本篇培訓(xùn)材料旨在引導(dǎo)讀者入門(mén) 學(xué)會(huì)PC LINT的基本使用方法 一些常見(jiàn)選項(xiàng)的使用 常見(jiàn)告警的分析及規(guī)避措施 希望可以起拋磚引玉的作用 為讀者深入掌握PC Lint的使用打下基礎(chǔ) 本篇材料主要是以PC Lint8 0在Windows上的使用為基礎(chǔ)來(lái)做的 PC Lint基本使用方法 PC Lint8 0主要由以下一些文件組成 Lint nt exeWindows下的執(zhí)行文件Msg txt全部選項(xiàng)幫助說(shuō)明文件PC Lint pdfPC Lint的幫助文件Config exe配置程序Std lnt標(biāo)準(zhǔn)配置文件Options lnt選項(xiàng)配置文件 Lnt子目錄下的各種開(kāi)發(fā)編譯環(huán)境的配置文件其他一些文件 PC Lint基本使用方法 PC Lint是一個(gè)命令行工具 因此使用方式是命令行帶參數(shù)方式使用 一般的使用格式為 lint nt exe Option file1file2 如 lint nt exe u id lintstd lntsample c在這里 u表示只對(duì)本單元進(jìn)行檢查 id lint是表示會(huì)在d lint目錄下搜索文件std lnt是表示要使用的配置文件sample c表示要檢查的源文件 PC Lint基本使用方法 檢查一個(gè)目錄下的所有源文件可以使用以下方法 如 lint nt exe u id lintstd lntd osp vos cpp跟前面不同的是這里將sample c變成了d osp vos cpp 使用 cpp的意思是它會(huì)檢查d osp vos目錄下的所有 cpp文件 但是它不能檢查子目錄下的文件 PC Lint基本使用方法 要檢查所有包括子目錄的文件可以使用以下方法 lint nt id lintstd lntAllSource lnt在AllSource lnt文件中可以放置如下 Moudule1 Dir cppMoudule2 Dir cppMoudule3 Dir cpp 當(dāng)檢查所有文件時(shí)不需要使用 u選項(xiàng) PC Lint基本使用方法 PC Lint配置文件介紹PC Lint使用那個(gè)配置文件是由命令行參數(shù)決定的 一般地都使用std lnt文件 std lnt文件中可以包含各種配置選項(xiàng) 還可以包含其他的配置文件 有點(diǎn)類似C的頭文件 里面可以include許多其他頭文件 不過(guò)PC Lint配置文件包含其他配置文件不需要寫(xiě)include 直接寫(xiě)文件名就可以了 每個(gè)配置文件里都可以包含配置選項(xiàng) 這些配置選項(xiàng)也可以放在命令行中 一般為使用方便 命令行中不要放很多選項(xiàng) 盡量都將選項(xiàng)放到配置文件中 PC Lint基本使用方法 以下是VC下的配置文件樣例 Microtec32 bit si4 sp4 lib w32 lnt Standardlintoptionsco msc60 lnt PC Lint提供的對(duì)VC6的告警屏蔽文件lib w32 lnt PC Lint提供的對(duì)VC6庫(kù)頭文件的告警屏蔽文件options lnt si4 sp4 用戶自定義的選項(xiàng)文件env vc6 lnt 用戶用來(lái)設(shè)置編輯環(huán)境的配置文件 id vc6 vc98 include include目錄 id vc6 vc98 mfc include include目錄 PC Lint基本使用方法 一般來(lái)說(shuō) PC Lint經(jīng)常會(huì)有一些誤報(bào) 為了消除這些誤報(bào) 不得不將程序風(fēng)格改動(dòng)來(lái)規(guī)避 但有時(shí)候怎么改寫(xiě)程序都有告警 比如說(shuō)你定義了兩個(gè)宏 前面那個(gè)宏里有一半大括號(hào) 后面那個(gè)宏里有另一半大括號(hào) 這時(shí)候一定會(huì)有告警 你不得不使用一些PC Lint選項(xiàng)來(lái)屏蔽這些告警 一般情況下 我們都將自己要寫(xiě)的選項(xiàng)放在Options lnt文件中 PC Lint基本使用方法 另外還有關(guān)于編輯環(huán)境的問(wèn)題 如果把PC Lint集成到某個(gè)編輯環(huán)境中 那么他輸入的格式必須和對(duì)應(yīng)環(huán)境吻合才能保證在鼠標(biāo)點(diǎn)擊 或雙擊 錯(cuò)誤消息條目時(shí)可以自動(dòng)定位到對(duì)應(yīng)源代碼行 一般來(lái)說(shuō)這類配置都放置在env xxx lnt文件中 如VC6的時(shí)env vc6 lnt SourceInsight的是env si lntPC Lint本身提供了對(duì)各種編譯器及對(duì)應(yīng)庫(kù)頭文件的告警屏蔽文件 如co msc60 lnt是對(duì)vc6的 lib w32 lnt是對(duì)Win32庫(kù)頭文件告警的屏蔽配置文件 PC Lint常用選項(xiàng) i選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)設(shè)置include路徑的如 iD VC6 VC98 Include e 選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)屏蔽告警號(hào)為 的告警如 e818表示不顯示告警號(hào)為818的告警 esym 符號(hào)名 選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)屏蔽告警號(hào)為 的某個(gè)符號(hào)的告警 如 esym 39 std emacro 宏名稱 選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)屏蔽告警號(hào)為 的某個(gè)宏的告警 PC Lint常用選項(xiàng) dname value 這個(gè)選項(xiàng)主要是用來(lái)定義一個(gè)宏的如 dWIN32 dalpha 0 sp 表示指針的尺寸大小是 字節(jié)如 sp4表示指針是4個(gè)字節(jié)大小 si 表示int的尺寸大小是字節(jié)如 si4表示int型是4個(gè)字節(jié)大小 t 設(shè)置Tab鍵的大小為 個(gè)空格 缺省是8 PC Lint常用選項(xiàng) sem選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)消除一些語(yǔ)義上的告警比如說(shuō)在一個(gè)函數(shù)A里面分配了內(nèi)存 這時(shí)調(diào)用了另一個(gè)函數(shù)AddNode將分配的內(nèi)存保存起來(lái)了 因此在函數(shù)A里面沒(méi)有釋放內(nèi)存 如果使用PC Lint檢查會(huì)有內(nèi)存泄漏方面的告警 因?yàn)镻C Lint不知道函數(shù)AddNode將分配的內(nèi)存保存起來(lái)了 要消除這個(gè)告警就要用到 sem選項(xiàng)了 假設(shè)AddNode的第2個(gè)參數(shù)是用來(lái)保存分配內(nèi)存 用法如下 sem AddNode custodial 2 這里custodial關(guān)鍵字是表示保存的意思 2是表示第2個(gè)參數(shù) sem選項(xiàng)還有些其他用法 大家可以看PC Lint自帶的pc lint pdf文件 里面有詳細(xì)的解析 PC Lint常用選項(xiàng) function function0 function1 選項(xiàng)這個(gè)選項(xiàng)一般情況下主要是用來(lái)表示function1及后面省略掉的函數(shù)和function0有類似的行為 如 function malloc mymalloc1 mymalloc2 表示mymalloc1 mymalloc2和malloc有類似的行為 因?yàn)閙alloc是用來(lái)分配內(nèi)存的 所以pc lint在檢查mymalloc1和mymalloc2時(shí)也會(huì)想檢查malloc一樣看是否有釋放掉象上一頁(yè)里已經(jīng)定義了AddNode為保存內(nèi)存的函數(shù) 如果碰到還有一個(gè)函數(shù)AddEvent也是有保存內(nèi)存的功能 我們除了可以使用 sem AddEvent custodial 2 外 也可以使用 function AddNode AddEvent 效果是一樣的 不過(guò)要注意的是AddEvent保存內(nèi)存的參數(shù)也要和AddNode一樣是第2個(gè) PC Lint常用選項(xiàng) format選項(xiàng)這個(gè)選項(xiàng)主要是用來(lái)設(shè)置輸出告警消息格式的 以便于可以和編輯環(huán)境格式一樣 便于自動(dòng)定位到告警對(duì)應(yīng)的源代碼如對(duì)SourceInsight format選項(xiàng)的使用如下 format f l t n m 這里 f表示文件名 l表示代碼行號(hào) t表示告警類型 如warning error等 n表示PC Lint的告警號(hào) m表示PC Lint輸出的告警文本信息 PC Lint常用選項(xiàng) fallthrough這個(gè)選項(xiàng)主要是用在switchcase中沒(méi)有使用break的情況可以在代碼中使用 lint fallthrough來(lái)消除沒(méi)有使用break的告警 save保存錯(cuò)誤抑制狀態(tài)如 在代碼中使用 lint save e429則表示從這行開(kāi)始之后的代碼抑制429告警的出現(xiàn) 直到使用 lint restore來(lái)進(jìn)行恢復(fù)后才會(huì)重新出現(xiàn)429告警 restore重新設(shè)置錯(cuò)誤抑制狀態(tài) 使用 save選項(xiàng)抑制的告警將重新恢復(fù) 在使用了 save選項(xiàng)后一定要記住使用 restore進(jìn)行恢復(fù) 否則可能有許多告警就被屏蔽調(diào)不出現(xiàn)了 PC Lint常用選項(xiàng) 其他一些常用選項(xiàng)還有 elib抑制庫(kù)頭文件的告警 elibsym抑制庫(kù)頭文件中某個(gè)符號(hào)的告警 wlevel設(shè)置告警級(jí)別 efile用來(lái)抑制一個(gè)或多個(gè)文件里的告警 efunc用來(lái)抑制一個(gè)或多個(gè)函數(shù)里的告警 rw設(shè)置保留關(guān)鍵字等等 象 efile wlevel這些告警不要輕易使用這些選項(xiàng)的具體用法請(qǐng)看pc lint pdf文件 PC Lint在各種環(huán)境中的集成 PC Lint在各種環(huán)境中的集成方法原理都是一樣的 只要掌握前面講的基本用法 知道如何用命令行來(lái)檢測(cè)單個(gè)文件 一個(gè)目錄下的所有文件 許多目錄下的所有文件等 然后再結(jié)合各種環(huán)境的具體設(shè)置 就可以很方便地將PC Lint集成到各種應(yīng)用環(huán)境中了 下面將以VC6 SourceInsight UltraEdit Tornado四種環(huán)境為例講述如何集成PC Lint PC Lint在各種環(huán)境中的集成 在vc環(huán)境中集成在VC的Tools菜單中 按Customize 會(huì)出現(xiàn)下一頁(yè)出現(xiàn)的對(duì)話框先在上面的列表框里增加一個(gè)條目 里面填上PC Lint80 文本內(nèi)容可以是其他的 由你自己決定 然后在Command 這一欄中輸入PC Lint的執(zhí)行文件名 要帶上目錄再在Arguments 一欄里填上 u iC Lintstd lnt FileName 這里 FileName 表示VC窗口里當(dāng)前打開(kāi)的文件名你也可以將它改成 FileDir cpp表示檢查當(dāng)前打開(kāi)文件同一目錄下的所有 cpp文件 通常用于檢查一個(gè)模塊還可以改成AllSource lnt 象前面講過(guò)的一樣 AllSource lnt是一個(gè)放置有所有文件的配置文件 這時(shí)要將 u去掉 PC Lint在各種環(huán)境中的集成 PC Lint在各種環(huán)境中的集成 再在InitialDirectory一欄里填上 FileDir 最后再將useoutputwindow打上勾就完成了將PC Lint集成到VC環(huán)境中 PC Lint在各種環(huán)境中的集成 在SourceInsight3 1中的集成在SourceInsight3 1中集成PC Lint過(guò)程如下 1 從Options菜單中選擇 CustomCommands 命令項(xiàng) 2 點(diǎn)Add鍵會(huì)出現(xiàn)下面的AddNewCustomCommand對(duì)話框在Newcommandname 欄中輸入 PC lint80 原則上這個(gè)名稱可以隨便起 只要你能搞清楚它的含義就可以了 然后按OK按鈕 PC Lint在各種環(huán)境中的集成 3 在Run欄中輸入 d lint lint nt u ic lintstd lntenv si f 其中d lint是你PC LINT的安裝目錄 f是表示當(dāng)前打開(kāi)的文件 如果要Lint多個(gè)文件則需要使用配置文件 在配置文件里包含多個(gè)文件 將 f改成你自己的配置文件即可 4 在Output欄中選擇 IconicWindow CaptureOutput 5 在Control欄中選擇 SaveFilesFirst 將缺省打了勾選上的 PauseWhenDone 改成不選擇 6 在SourceLinksinOutput欄中選擇 ParseLinksinOutput File thenLine 7 在Pattern欄中將缺省設(shè)置改成 0 9 就大功告成了 8 如果需要Lint當(dāng)前打開(kāi)文件的同一目錄下所有文件 可以將 f改成 d cpp如下圖 PC Lint在各種環(huán)境中的集成 PC Lint在各種環(huán)境中的集成 在Tornado2 0環(huán)境中集成在Tornado2 0的Tools菜單中點(diǎn)Customize 后會(huì)出現(xiàn)如下一頁(yè)的對(duì)話框 先在對(duì)話框中按Add 按鈕在MenuText一欄中輸入PC Lint80在ToolCommand 一欄中輸入D LINT lint nt exe iD Lintstd lnt filename你也可以象前面講過(guò)VC中集成一樣 將 filename改成 filedir cpp或AllSource lnt在Working一欄中輸入 filedir再將RedirecttoChildWind選上 按OK就可以了 PC Lint在各種環(huán)境中的集成 PC Lint在各種環(huán)境中的集成 在UltraEdit環(huán)境中集成在Advanced菜單中選ToolConfiguration 顯示圖如下一頁(yè)所示在commandline 中填寫(xiě) d lint lint nt iD Lintstd lnt F在MenuItem中填寫(xiě) PC Lint80在CommandOutput中選擇 x OutputtoListBox和 x CaptureOutput5 按Insert按鈕再按OK按鈕就可以了 PC Lint在各種環(huán)境中的集成 PC Lint常見(jiàn)告警分析及解決措施 PC Lint的告警級(jí)別定義如下 PC Lint常見(jiàn)告警分析及解決措施 PC Lint告警分為0 4級(jí) 其中0級(jí)是內(nèi)部錯(cuò)誤或致命錯(cuò)誤 1級(jí)告警是句法錯(cuò)誤 2級(jí)告警是警告 3級(jí)是信息 4級(jí)是可選的 4級(jí)缺省是不打開(kāi)的 0級(jí)告警是不允許出現(xiàn)的 1級(jí)告警一般也是不允許出現(xiàn)的 如果出現(xiàn) 說(shuō)明可能PC Lint配置上可能有問(wèn)題 或者程序根本編譯不過(guò) 2級(jí)告警一般也是不能屏蔽的 2級(jí)告警很多是內(nèi)存資源沒(méi)有釋放 指針越界一類的警告 會(huì)產(chǎn)生嚴(yán)重問(wèn)題 3級(jí)告警有些告警也是非常重要的 會(huì)引起嚴(yán)重問(wèn)題 有些告警屬于提示信息 問(wèn)題不是很大 所以3級(jí)告警里要分情況對(duì)待 0 2級(jí)告警都不能使用 e選項(xiàng)進(jìn)行屏蔽 只能使用 esym emacro sem之類的選項(xiàng)進(jìn)行屏蔽 3級(jí)告警要根據(jù)具體情況 有些可以使用 e選項(xiàng)進(jìn)行屏蔽 有些不可以 下面就對(duì)經(jīng)常遇到的一些告警進(jìn)行詳細(xì)的分析及討論解決措施 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 39告警等級(jí) 1告警消息樣例 stl type traits h 279 error39 Error Redefinitionofsymbol type traits conflictswithline271 分析及解決措施 可以使用 esym 39 符號(hào)名 來(lái)消除此告警 在這里可以使用 esym 39 type traits PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 402告警等級(jí) 2告警消息樣例 XXX cpp 77 error402 Warning staticfunction VOS GetFixedStackDepth void line77 分析及解決措施 主要是函數(shù)原型申明為靜態(tài)的 但函數(shù)實(shí)體確漏寫(xiě)了static造成 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 413告警等級(jí) 2告警消息樣例 xxx cpp 1118 error413 Warning Likelyuseofnullpointerunknown name inargumenttooperatorunary 分析及解決措施 指針未校驗(yàn)引起 如果確認(rèn)指針可以由外部保證則可以使用ASSERT來(lái)消除此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 429告警等級(jí) 2告警消息樣例 XXX cpp 2474 error429 Warning Custodialpointer pEvent line2459 hasnotbeenfreedorreturned 分析及解決措施 AddEvent將指針pEvent保存起來(lái) 解決辦法是使用 sem ISystem AddEvent 1p custodial 1 來(lái)屏蔽此告警 這里1p是表示第1個(gè)參數(shù) custodial 1 是表示第1個(gè)參數(shù)被保留起來(lái)了 另外還有函數(shù)遞歸調(diào)用時(shí) 如果遞歸調(diào)用時(shí)使用的參數(shù)和函數(shù)參數(shù)同名也會(huì)出現(xiàn)此告警 遞歸調(diào)用時(shí)必須將參數(shù)改名 還有一種情況是在父函數(shù)里分配了內(nèi)存 傳遞到子函數(shù)后 由于子函數(shù)里有return語(yǔ)句有時(shí)也會(huì)產(chǎn)生429告警 這種行為非常奇怪 目前沒(méi)有找到好的消除辦法 盡量將程序結(jié)構(gòu)改成把return語(yǔ)句去掉就沒(méi)有這個(gè)告警了 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 522告警等級(jí) 2告警消息樣例 error522 Warning Expectedvoidtype assignment incrementordecrement 分析及解決措施 單獨(dú)的 p 型可以改寫(xiě)成 p 可以避免此告警 如果是 p 就沒(méi)有必要了 直接寫(xiě)成p 就可以了 p 型作為右值的話一般不會(huì)有此告警 另外函數(shù)返回值未處理有時(shí)也有此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 525告警等級(jí) 2告警消息樣例 Warning525 Negativeindentationfromline312分析及解決措施 如果確定程序沒(méi)有問(wèn)題的話 可以檢查告警525的產(chǎn)生是否由于程序中有Tab鍵或者程序排版沒(méi)有對(duì)齊造成的 將Tab刪掉 改成空格 將排版格式對(duì)齊就可以了 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 534告警等級(jí) 2告警消息樣例 xxx cpp 1694 error534 Warning Ignoringreturnvalueoffunction YYY unsignedlong comparewithline180分析及解決措施 一般都是由于沒(méi)有處理函數(shù)返回值造成 如果確信函數(shù)返回值可以不處理的話 只要在不需要處理函數(shù)返回值的函數(shù)前加上 void 就可以了 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 539告警等級(jí) 2告警消息樣例 Warning539 Didnotexpectpositiveindentationfromline210分析及解決措施 除了左邊所說(shuō)的問(wèn)題外 如果程序中有TAB鍵 且不是8個(gè)空格的話 有時(shí)也會(huì)引起告警539的產(chǎn)生 如果消除掉左邊所說(shuō)的問(wèn)題還有539告警的話 則估計(jì)是由于程序中有Tab鍵造成的 將Tab刪掉 改成空格 并且排版格式要對(duì)齊就可以了 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 613告警等級(jí) 2告警消息樣例 XXX cpp 374 error613 Warning Possibleuseofnullpointer matrix inleftargumenttooperator ptr int 分析及解決措施 通常是由于指針和整數(shù)相加造成的問(wèn)題bool matrix bool newbool size t len len bool dep matrix row len 可以改寫(xiě)成先將地址轉(zhuǎn)換成整數(shù)形式 再相加后 再將整數(shù)形式的地址轉(zhuǎn)換為指針可以消除此告警 另外還有指針在其他函數(shù)校驗(yàn)了 但在本函數(shù)內(nèi)沒(méi)有校驗(yàn)也會(huì)有此告警 象組建中 因?yàn)橛蠭nitialize 函數(shù)里保證那些組件指針的合法性 因此在其他函數(shù)里不再需要對(duì)這些指針做校驗(yàn) 此種情況可以使用ASSERT 來(lái)消除此告警 其他情況請(qǐng)使用指針校驗(yàn)來(lái)消除此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 616告警等級(jí) 2告警消息樣例 XXX cpp 162 error616 Warning controlflowsintocase default 分析及解決措施 case沒(méi)有break 語(yǔ)句的問(wèn)題 使用 lint fallthrough來(lái)屏蔽 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 661告警等級(jí) 2告警消息樣例 XXX cpp 2560 error661 Warning Possibleaccessofout of boundspointer 1beyondendofdata byoperator unary 分析及解決措施 內(nèi)存越界問(wèn)題 如果由調(diào)用方保證 可以使用ASSERT來(lái)消除此告警 否則應(yīng)該對(duì)輸入?yún)?shù)進(jìn)行校驗(yàn) PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 668告警等級(jí) 2告警消息樣例 XXX cpp 1211 error668 Warning Possiblypassinganullpointertofunction memset void int unsignedint arg no 1分析及解決措施 指針可能為null 一般都是由于沒(méi)有進(jìn)行校驗(yàn)引起 如果指針由外部可以保證的話 可以使用ASSERT消除這個(gè)告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 672告警等級(jí) 2告警消息樣例 XXX cpp 353 error672 Warning Possiblememoryleakinassignmenttopointer cmpFactory m pLibrary 分析及解決措施 一個(gè)函數(shù)中申請(qǐng)了內(nèi)存在本函數(shù)中沒(méi)有釋放 在其他函數(shù)中釋放會(huì)引起這個(gè)告警可以使用 esym或 sem來(lái)消除 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 685告警等級(jí) 2告警消息樣例 XXX cpp 2346 error685 Warning Relationaloperator alwaysevaluatesto true 分析及解決措施 簡(jiǎn)單問(wèn)題 通常是代碼里判斷條件錯(cuò)誤造成 修改代碼即可比如定義一個(gè)char類型變量 條件判斷讓它 127 那么顯然判斷總是真 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 708告警等級(jí) 2告警消息樣例 XXX cpp 1470 error708 Info unioninitialization 分析及解決措施 要對(duì)聯(lián)合體的第一個(gè)成員賦值進(jìn)行初始化才不會(huì)告警不可以直接寫(xiě)成unionAa 0 而應(yīng)該寫(xiě)成unionAa a First 0 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 716告警等級(jí) 2告警消息樣例 XXX cpp 201 error716 Info while 1 分析及解決措施 while 1 的問(wèn)題 請(qǐng)使用for 替代 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 717告警等級(jí) 2告警消息樣例 XXX cpp 508 error717 Info do while 0 分析及解決措施 使用 emacro進(jìn)行屏蔽或者修改代碼 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 725告警等級(jí) 2告警消息樣例 XXX cpp 311 error725 Info Expectedpositiveindentationfromline308 分析及解決措施 有時(shí)候是因?yàn)門(mén)ab鍵或排版格式?jīng)]有對(duì)齊造成 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 731告警等級(jí) 2告警消息樣例 XXX cpp 331 error731 Info Booleanargumenttoequal notequal 分析及解決措施 判斷兩個(gè)bool變量或表達(dá)式是否相等或不等時(shí)會(huì)出現(xiàn)此告警 如 if monPer15 m bCollectOf15 當(dāng)出現(xiàn)此告警時(shí)可以改為if INT monPer15 INT m bCollectOf15 可以消除此告警 如果象這樣寫(xiě)也會(huì)出現(xiàn)此告警 如if true m bFlag 只要改寫(xiě)為if m bFlag 就可以消除此告警了 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 747告警等級(jí) 2告警消息樣例 XXX cpp 1446 error747 Info Significantprototypecoercion arg no 2 inttobool SetCrossTR pSetting period false 清除性能越限標(biāo)記 分析及解決措施 類型轉(zhuǎn)換問(wèn)題 如SetThisCrossTR pSetting false 有此告警 改寫(xiě)成SetThisCrossTR pSetting bool false 則消除了這個(gè)告警 一般情況下盡量避免使用bool型變量 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 774告警等級(jí) 2告警消息樣例 XXX cpp 146 error774 Info Booleanwithin if alwaysevaluatestoTrue分析及解決措施 bool表達(dá)式總是真值或總是假值voidclaNameManager ManagerDestroy ASSERT m pNameTable NULL m pNameTable HashDestroy if m pNameTable NULL deletem pNameTable m pNameTable NULL 明顯應(yīng)該將HashDestroy放到if判斷里面 并且要?jiǎng)h除掉ASSERT那一行 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 785告警等級(jí) 2告警消息樣例 XXX cpp 639 error785 Info Toofewinitializersforaggregate 分析及解決措施 通常時(shí)給數(shù)組初始化賦值時(shí)沒(méi)有給所有的賦值造成 可以將其他的也賦值完來(lái)消除這個(gè)問(wèn)題 這個(gè)告警目前在平臺(tái)中非常多 即使使用 e參數(shù)屏蔽也屏蔽不了 還是會(huì)出現(xiàn) 這就要求編碼時(shí)養(yǎng)成良好的習(xí)慣 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 786告警等級(jí) 2告警消息樣例 XXX cpp 2451 error786 Info Stringconcatenationwithininitializer 分析及解決措施 同一個(gè)字符串分成多行書(shū)寫(xiě)時(shí) 使用雙引號(hào)進(jìn)行連接出的告警 此告警主要是提示是否多個(gè)字符串在中間忘了用標(biāo)點(diǎn)符號(hào)格開(kāi) 有時(shí)候有些字符串很長(zhǎng) 需要分成多行書(shū)寫(xiě)時(shí)也會(huì)使用多個(gè)雙引號(hào) 這時(shí)可以使用 lint save 786 lint restore來(lái)屏蔽 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 794告警等級(jí) 2告警消息樣例 XXX cpp 934 error794 Info Conceivableuseofnullpointer p inleftargumenttooperator ptr ptr 分析及解決措施 同告警613一樣 指針未校驗(yàn)引起 如果校驗(yàn)是在函數(shù)外部保證的 可以使用ASSERT來(lái)避免此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 796告警等級(jí) 2告警消息樣例 XXX cpp 396 error796 Info Conceivableaccessofout of boundspointer 1beyondendofdata byoperator unary 分析及解決措施 指針有可能越界的問(wèn)題 通常是由于沒(méi)有校驗(yàn)分配空間長(zhǎng)度引起 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 797告警等級(jí) 2告警消息樣例 XXX cpp 396 error797 Info Conceivablecreationofout of boundspointer 2beyondendofdata byoperator 分析及解決措施 指針未做校驗(yàn)有可能引起越界 比如定義一個(gè)指針指向字符串 但是在使用p 操作時(shí)沒(méi)有先判斷指針是否會(huì)越界如可以判斷 p 0 或校驗(yàn)指針和起點(diǎn)地址差是否超過(guò)預(yù)先分配的空間長(zhǎng)度 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 801告警等級(jí) 3告警消息樣例 XXX cpp 340 error801 Info Useofgotoisdeprecated 分析及解決措施 使用了goto語(yǔ)句造成 有些人使用goto語(yǔ)句不規(guī)范 如果屏蔽會(huì)引發(fā)其他程序結(jié)構(gòu)不合理的問(wèn)題 所以在程序中還是不要使用goto語(yǔ)句 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 818告警等級(jí) 3告警消息樣例 XXX c 323 Info818 Pointerparameter pGraph line206 couldbedeclaredaspointingtoconst分析及解決措施 這個(gè)問(wèn)題產(chǎn)生主要是因?yàn)楹瘮?shù)參數(shù)在函數(shù)中為只讀的 可以申明為const類型 但是如果使用以下形式 typdefstructPOINT t intx inty POINT LPPOINT intInsertPoint LPPOINTpPoint 如果使用LPPOINT類型的指針類型來(lái)定義參數(shù)的話 即使改為constLPPOINTpPoint也仍然會(huì)有告警 必須改為constPOINT pPoint才能消除此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 825告警等級(jí) 3告警消息樣例 XXX cpp 2243 error825 Info controlflowsintocase defaultwithout fallthroughcomment 分析及解決措施 使用 lint fallthrough在代碼里進(jìn)行注釋可以消除此告警 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 826告警等級(jí) 3告警消息樣例 XXX cpp 290 error826 Info Suspiciouspointer to pointerconversion areatoosmall 分析及解決措施 這個(gè)問(wèn)題的產(chǎn)生通常是由于內(nèi)存越界造成或?qū)⒁粋€(gè)空間小的指針轉(zhuǎn)換為一個(gè)空間大的指針造成 xxx cpp中的代碼為 pTailCheck DWORD CHAR pBuf pPtInfo BufSize VOS PT BUF TAIL LEN 實(shí)際上是將CHAR 轉(zhuǎn)換為DWORD 造成的 可以在本行前使用注釋 lint save e826 屏蔽 在本行后再使用 lint restore 恢復(fù)的辦法 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 834告警等級(jí) 3告警消息樣例 intx rect Width cxIcon 1 2 XXX cpp 178 Info834 Operator followedbyoperator isconfusing Useparentheses 分析及解決措施 這個(gè)告警很簡(jiǎn)單 主要是需要使用括號(hào)將表達(dá)式按運(yùn)算優(yōu)先順序括起來(lái)以方便閱讀 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 1065告警等級(jí) 3告警消息樣例 XXX cpp 657 error1065 Error Symbol VOS TerminateHandle void notdeclaredas C conflictswithline510 分析及解決措施 在頭文件里被申明為extern C 但在cpp文件里函數(shù)前沒(méi)有加上extern C 關(guān)鍵字造成 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 1540告警等級(jí) 3告警消息樣例 XXX cpp 495 error1540 Warning Pointermember CXXXObject m pCrc4Fecses line76 XXXP h moduleYYY cpp neitherfreednorzero edbydestructor 分析及解決措施 析構(gòu)函數(shù)中沒(méi)有對(duì)成員指針變量進(jìn)行內(nèi)存釋放或清零操作 修改代碼即可 PC Lint常見(jiàn)告警分析及解決措施 告警號(hào) 1732告警等級(jí) 3告警消息樣例 XXX cpp
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度石油化工設(shè)備采購(gòu)合同補(bǔ)充協(xié)議范本3篇
- 二零二五年度vi設(shè)計(jì)創(chuàng)意制作合同范本2篇
- 二零二五版環(huán)境安全風(fēng)險(xiǎn)評(píng)估與治理合同3篇
- 合同管理在2025年度招投標(biāo)中的合規(guī)性分析3篇
- 二零二五版企業(yè)內(nèi)部技術(shù)人員掛靠合作合同范本3篇
- 二零二五年度高壓電氣設(shè)備采購(gòu)及安裝合同2篇
- 二零二五版寶鋼集團(tuán)勞動(dòng)合同員工加班費(fèi)及休息日工作安排3篇
- 二零二五年度車(chē)輛質(zhì)押擔(dān)保合同樣本2篇
- 二零二五版公路貨運(yùn)合同道路運(yùn)輸許可證管理與審查規(guī)范3篇
- 二零二五年度綠色環(huán)保房地產(chǎn)商品房買(mǎi)賣(mài)合同書(shū)3篇
- 10日益重要的國(guó)際組織第三課時(shí)中國(guó)與國(guó)際組織(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治六年級(jí)下冊(cè)
- Unit 1 同步練習(xí)人教版2024七年級(jí)英語(yǔ)上冊(cè)
- 工程管理重大風(fēng)險(xiǎn)應(yīng)對(duì)方案
- 直播帶貨助農(nóng)現(xiàn)狀及發(fā)展對(duì)策研究-以抖音直播為例(開(kāi)題)
- 腰椎間盤(pán)突出疑難病例討論
- 《光伏發(fā)電工程工程量清單計(jì)價(jià)規(guī)范》
- 2023-2024學(xué)年度人教版四年級(jí)語(yǔ)文上冊(cè)寒假作業(yè)
- (完整版)保證藥品信息來(lái)源合法、真實(shí)、安全的管理措施、情況說(shuō)明及相關(guān)證明
- 營(yíng)銷專員績(jī)效考核指標(biāo)
- 陜西麟游風(fēng)電吊裝方案專家論證版
- 供應(yīng)商審核培訓(xùn)教程
評(píng)論
0/150
提交評(píng)論