<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks

    2006-4-14 Lander 整理
    介紹:對于多個源程序文件且多個頭文件目錄的項目進行PCLint語法檢查。

    1.安裝
     我使用的是PC.Lint.v8.00e,是不用安裝的版本。
     解開到E:\PC.Lint.v8.00e目錄,可執行文件為Lint.exe(lint-nt.exe與其相同,可能為NT平臺用的,在Win2000下都可運行)。
     子目錄lnt內是檢查的規則及選項文件,這兩種文件擴展名全為.lnt。

    2.準備自己工程的選項文件
     在E:\PC.Lint.v8.00e\lnt下新建MyProj.lnt文本文件,我們將自己工程的很多頭文件目錄,在其中一一列出來,內容如下:
     
     std.lnt/*注釋:包含的規則和/或選項文件*/
     env-vc6.lnt
     /*下面為各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
     -i"C:\MyProj\IncludeA" -i"C:\MyProj\IncludeB" -iC:\MyProj\IncludeC
     -iC:\MyProj\IncludeD
     -e641//另一種注釋//這是省略#641錯誤
     【注意】指明各頭文件目錄很重要。頭文件各目錄的名稱可能在VC的Project\Project Settings\Project Options欄中:
      /I "../Include/PS",可供借鑒(相對路徑暫未測試)。
      當后面運行Lint時出現無法打開某個頭文件時,需要不斷添加頭文件所在目錄的名稱到本選項文件中。

    3.在VC中運行PCLint(針對單個文件但需包含多個頭文件目錄):
        A 點擊Tools/Customize/Tools出現定制窗口
        B 在Menu contents中雙擊下面的空白攔,輸入擬新增的Tool名稱:PCLint
        C 雙擊PClint項,在Command中填入要調用的.exe文件名:lint
          Arguments:中填入:-i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt $(FilePath)
          【注意】$(FilePath)這個字串是個宏名,也可以通過點擊右邊的三角箭頭選擇;可能為要檢查的本文件的路徑加文件名,而
          不能是$(FileName)!!!因為它可能只是文件名而不帶路徑,將導致使用時說無法發現!
          另外,MyProj.lnt這個選項文件必須在$(FilePath)之前。
          Initial Directory項:在Arguments項中若缺少-i"E:\PC.Lint.v8.00e\lnt"時將報無法找到各個.lnt文件,可在此
          欄填E:\PC.Lint.v8.00e\lnt來指定。
          選中"Use Output Window" (這將使PCLint運行的結果在VC下方Output窗口中,雙擊行號還可以跳到指定行)
        D 打開一個項目,讓焦點位于某個源程序編輯窗口,點擊Tools/pclint菜單即可

    【注意】直到VC Output窗口中出現Tool returned code: ,才算Tool運行完,若未運行完,可能在再點擊PCLint時報錯。

    4.網上搜到的VC環境多個文件同時Lint的方法,大致為找到各個.c文件,將各文件名經xargs傳給lint來實現。但需要find,xargs等
    命令,似乎需要模擬unix環境的軟件支持中才有,我裝的Cygwin的環境中對find命令后的格式有問題,無法支持unix中的
    find . -name *.c,故無法由此找到各個.c文件名。但可以用Cygwin的ls命令來代替find。
     【原方法如下:】
       A 點擊Tools/Customize/Tools出現定制窗口
      B 在Menu contents中雙擊空白攔,輸入:PCLint-project
      C 雙擊PCLint-project項,在Command:中填入:find
          Arguments:中填入:$(FileDir) -name *.c | xargs pclint -i"c:\unix\usr" -u std.lnt env-vc6.lnt
          選中"Use Output Window"
      D 打開一個項目,讓焦點位于最項層目前的一個Source Window中,點擊Tools/PCLint-project菜單即可

     【方法1如下:】
      A 點擊Tools/Customize/Tools出現定制窗口
      B 在Menu contents中雙擊空白攔,輸入:PCLint-Proj
      C 雙擊PCLint-Proj項,在Command:中填入:ls
          Arguments:中填入:*.c |xargs lint -i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt
          Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:\PC.Lint.v8.00e\lnt")
          選中"Use Output Window"
      D 打開一個項目,讓焦點位于最頂層目前的一個Source Window中,點擊Tools/PCLint-Proj菜單即可

     【最簡單的方法如下:】
      A 在MyProj.lnt末尾添加一行 *.c (即目標為本目錄下所有.c文件)
      B 點擊Tools/Customize/Tools出現定制窗口
      C 在Menu contents中雙擊空白攔,輸入:PCLint-Proj
      D 雙擊PCLint-Proj項,在Command:中填入:lint
          Arguments:中填入:-i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt
          Initial Directory項:本欄填寫工程的一個源文件子目錄(保證在Arguments項中有-i"E:\PC.Lint.v8.00e\lnt")
          選中"Use Output Window"
      E 打開一個項目,讓焦點位于最項層目前的一個Source Window中,點擊Tools/PCLint-Proj菜單即可

    【注意】上述方法中的ls,xargs等命令位于Cygwin的目錄中,需要將路徑添加到系統的PATH中:
      "我的電腦"(右擊鼠標)->"屬性"->"高級"->"環境變量"->"系統變量"->"Path"
        加入"C:\cygwin\bin"重啟生效。
     ls *.c將同時找到.c文件和.cpp文件,但是也會將非工程所需的.c文件編譯進來,需要手工把文件轉走。
     另外,這種方法一次只能Lint一個目錄,每完成一個目錄就要重新設置Initial Directory項為新的要檢查的目錄。

    5.在DOS窗口中對一個目錄多個文件進行Lint
    1)基于Cygwin
    cd C:\MyProj\SrcA\
    ls *.c | xargs lint -i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt >> LintOutput.txt
    【注意】ls *.c 也可以用DOS命令dir *.c/B來替換,/B的意思是僅列出各文件名。>>LintOutput.txt的意思是將Lint結果輸出到
    LintOutput.txt文件中。
    2)無Cygwin支持
    cd C:\MyProj\SrcA\
    dir *.c /B
    將所有列出的.c文件名稱復制到E:\PC.Lint.v8.00e\lnt\MyProj.lnt中,內容如下:
     std.lnt/*注釋:包含的規則和/或選項文件*/
     env-vc6.lnt
     /*下面為各頭文件目錄,可以在字串中不要雙引號,可以有多行*/
     -i"C:\MyProj\IncludeA" -i"C:\MyProj\IncludeB" -iC:\MyProj\IncludeC
     -iC:\MyProj\IncludeD
     -e641//另一種注釋//這是省略#641錯誤
     a.c //指定要Lint的文件
     b.c
     c.c
     最后幾行指定的要Lint之文件也可以用通配符,如:
     *.c
    然后直接運行 lint -i"E:\PC.Lint.v8.00e\lnt" MyProj.lnt >> LintOutput.txt





    ===================================

    LINT工具是一種軟件質量保證工具,許多國外的大型專業軟件公司,如微軟公司,都 
    把它作為程序檢查工具,在程序合入正試版本或交付測試之前一定要保證通過了LINT檢查 
    ,他們要求軟件工程師在使用LINT時要打開所有的編譯開關,如果一定要關閉某些開關, 
    那么要給出關閉這些開關的正當理由。 

      可想而知,如果從我們編碼后第一次編譯程序時就使用LINT來檢查程序,并且保證消 
    除所有的LINT告警,我們就不會遇到象今天這么多的告警信息。即使在今天,我們如果能 
    抽出一定的精力來消除程序中的LINT告警,以后再維持這種無告警狀態就是很容易的了。 
    我們程序質量的提高也是不言而喻的。 

      PC-LINT是GIMPEL SOFTWARE公司的產品,其中的內容是非常廣泛的,光是選項就有30 
    0多個,涉及到程序編譯及語法使用中的方方面面。本篇培訓材料旨在引導讀者入門,學會 
    PC-LINT的基本使用方法,起拋磚引玉的作用,能讓讀者從這里起步繼續去研究如何嫻熟地 
    使用PC-LINT的各種選項,能讓它充分為我們的開發工作服務。 

    1.概述 
      如果要給LINT工具下一個形象點的定義,那就是:一種更加嚴格的編譯器。它不僅可 
    以象普通編譯器那樣檢查出一般的語法錯誤,還可以檢查出那些雖然完全合乎語法要求, 
    但很可能是潛在的、不易發現的錯誤。請看下面的例子: 
    1: 
    2:char *report( int m, int n, char *p ) 
    3:{ 
    4: int result; 
    5: char *temp; 
    6: long nm; 
    7: int i, k, kk; 
    8: char name[11] = "Joe Jakeson"; 
    9: 
    10: nm = n * m; 
    11: temp = p == "" ? "null" : p; 
    12: for( i = 0; i 13: { 
    14: k++; 
    15: kk = i; 
    16: } 
    17: 
    18: if( k== 1 ) result = nm; 
    19: else if( kk > 0 ) result = 1; 
    20: else if( kk < 0 ) result = -1; 
    21: 
    22: if( m == result ) return( temp ); 
    23: else return( name ); 
    24:} 
      上面的代碼用一般的編譯器編譯是一段有效的代碼,但是用PC-LINT編譯就會有幾個告 
    警。首先第8行向name數組賦值時丟掉了nul字符,第10行的乘法精度會失準,第11行的比 
    較有問題,第14行的變量k沒有初始化,第15行的kk可能沒有被初始化,第22行的result也 
    有可能沒有被初始化,第23行返回的是一個局部對象的地址。這段代碼在大部分編譯器下 
    是可以順利編譯通過的,繼續查找其中的錯誤就要靠人工調試程序,如果程序很大,這將 
    是一項煩瑣的工作,沒有人可以保證能找出所有的這類問題,但PC-LINT只通過一次簡單的 
    編譯就可做到,顯然為我們節省了大量的開發時間。 

      下面就讓我們看看如何安裝使用PC-LINT。 
    2.如何安裝PC-LINT 
      PC-LINT的軟件的安裝過程比較復雜,選項較多,下面根據安裝過程,逐條說明每一步 
    的含義。 
    0)如果是zip文件,將ZIP安裝文件展開到目錄C:\lint.ins下,進入COMMAND PROMPT,先 
    進行目錄映射 subst g: c:\lint.ins,然后轉到G: , 執行install。其他步驟和下面的從 
    軟盤安裝是一樣的。 

    1)在A:驅插入PC-LINT安裝盤,輸入A:\>install命令,進入開始安裝欄,按任意鍵繼續, 
    進入PC-LINT介紹欄,再按任意鍵繼續。 
    2)進入環境選擇欄,這一欄中有三個選項: 
    Windows NT/Windows 95 
    MS-DOS(DOS extended) 
    OS/2(32bit) 
    如果計算機安裝了WIN95、WIN97、WIN98或WINNT要選擇Windows NT/Windows 95,如果 
    只有DOS則選擇DOS。 
    3)進入安裝目錄選擇欄,它推薦的是C:\>LINT,如不想安裝在這個目錄下,可輸入自己想 
    要安裝的目錄,然后按回車確認,如果要安裝的目錄不存在,它會提示為你建立這個目錄 
    。我們這里選C:\>LINT 
    4)選擇安裝盤所在的磁盤驅動器,我們這里選A: 
    5)判斷是否要選擇多種編譯器或編譯庫的配置,如果要對不同編譯環境下的程序進行L 

    INT,則選YES,否則選NO。然后回車確認。 
    6)這時看到一個編譯器列表,在這個表中選擇自己使用的編譯器,如果表中沒有自己使用 
    的編譯器,可選擇通用編譯器:Generic Compilers。按回車確認。這個選項會體現在co- 
    xxx.lnt文件中。 
    7)接著安裝程序會讓你選擇一個的內存模型,可以根據自己程序區和數據區的實際大小選 
    擇一個恰當的內存模型。如果CPU為32位68K系列,則要選擇:32-bit Flat Module。 
    內存模型的選項會體現在STD.LNT文件中。 
    8)選完內存模型后,會看到一個庫類型的列表,在這里選擇一個或多個編譯時使用的庫。 
    這個選項會體現在LIB-xxx.LNT文件中。 
    9)接著是讓你選擇為使用C++編程提出過重要建議的作者,選擇的某作者后,他提出的編 
    程建議方面的選項將被打開。與作者選擇有關的選項會體現在AU-xxx.LNT文件中。 
    10)下一步是設置包含文件目錄。有兩種選項,第一種是使用環境變量INCLUDE,環境變量 
    在批處理文件中設置,環境變量后每個目錄用分號隔開,例如可設成“INCLUDE=C:\MRI\M 
    CC68K;D:\LAP\SRC\INC”。第二種選項是使用-i選項,-i選項體現在STD.LNT文件中,每個 
    目錄前以-I引導,目錄間以空格分隔,例如可設成“-IC:\MRI\MCC68K -ID:\LAP\SRC\INC 
    ”。如果選擇使用-I選項,安裝程序會接著讓你輸入包含文件所在的目錄。 
    11) 如果前面選擇了使用多個編譯環境,這里將會問你是否選擇更多的編譯環境,如果選 
    YES,將會從第6步開使重復。如果選NO則會結束編譯器選擇。 
    12)接下來將會準備產生一個 反映全局編譯信息顯示情況的選項文件OPTIONS.LNT,該文 
    件的產生方式有兩種,一種是安裝程序對幾個核心選項逐一解釋并提問你是否取消該選項 
    ,如果你選擇取消,則會體現在OPTIONS.LNT文件中,具體體現方式是在該類信息編碼前加 
    -e,后面第13~18步是逐一選擇核心選項的過程。如果選擇第二種選擇方式,安裝文件會先 
    生成一個空的OPTIONS.LNT文件,等你以后在實際應用時加入必要的選項。 
    13)是否關閉賦值時的布爾測試告警,如:if(a=f()){... 
    14)是否關閉賦值時的有符號量和無符號量間的不匹配告警,通常情況下,這種賦值不會 
    帶來問題,選擇關閉該告警信息的同時,其他類型的有符號量和無符號量間混合操作的告 
    警仍然是打開的。 
    15)當把一個整形量賦值給一個比它短的量時,后者會丟失精度,例如把一個INT量賦值給 
    給一個CHAR量。本步是讓你選擇是否關閉該類告警。 
    16)是否關閉左移帶符號量的告警。通常PC-LINT會對所有帶符號量的移動產生告警,但右 
    移一般是由不同的CPU來確定是否將符號位移入,左移一般是不會產生什么問題的,所以可 
    以選擇關閉該告警。 
    17)在一個C函數被定義或聲明前調用它,并不總是會產生錯誤,在這里可以選擇是否關閉 
    該告警選項。該選項對C++程序不起作用。 
    18)是否關閉“調用不存在的函數原型”告警。有些程序員不愿遵守嚴格的函數原形定義 
    約定,但PC-LINT會在調用一個沒有定義的函數原型時產生一個告警,在這里可以選擇關閉 
    該告警。 
    19)通過上面的步驟確定OPTIONS.LNT文件的形式后,接著是選擇編譯環境。PC-LINT提供 
    了集成在多種開發環境中工作的功能,例如可集成在VC、BC、Source Insight中。假如我 
    們在這里選擇Source Insight。選擇后安裝程序會繼續問你是否還選擇其它的環境,可根 
    據自己應用的實際情況選擇一種或多種開發環境。開發環境的選擇情況記錄在env-xxx.ln 
    t文件中。 
    20)安裝程序會生成一個LIN.BAT文件,該文件是運行PC-LINT的批處理文件,為了使該文 
    件能在任何路徑下運行,安裝程序提供了兩種方法供你選擇。第一種方法是讓你選擇把LI 
    N.BAT拷貝到任何一個PATH目錄下,在安裝結束運行LCOPY.BAT文件時,會把LIN.BAT拷貝到 
    你指定的目錄。第二種方法是生成一個LSET.BAT文件,在每次使用PC-LINT前先運行它來設 
    置路徑,或者把LSET.BAT文件的內容拷貝到AUTOEXEC.BAT文件中。 
    21)在安裝程序執行完后第一件事是在你安裝的目錄下執行LCOPY.BAT文件。它會從安裝盤 
    拷貝將一些文件拷貝到安裝目錄下,并根據你在安裝過程中的選擇來設置文件中的參數。 

    3.LINT 一個C文件 
    3.1用命令行方式進行LINT 
    如果使用LIN.BAT批處理文件進行LINT,在LINT前要先看一下該批處理文件中的內容,里面 
    包含了LINT-NT命令和命令選項,可以根據自己的要求來修改、增減選項。我們看到,在這 
    個批命令中嵌套了一個std.lnt文件,在std.lnt文件中還嵌套了co.lnt、options.lnt和l 
    ib-stl.lnt文件,原則上*.lnt文件是可以無限制嵌套,該類文件中一般都是了LINT的選項 
    ,可通過修改這些文件來修改LINT選項,選項是按照從左到右的順序執行的。可執行下面 
    命令行: 
    C:\abc\src>lin alpha.c beta.c gamma.c 
    通常對于由多個C模塊組成的程序,最好先分別對每個C模塊單元進行LINT檢查,做單元LI 
    NT時可如下運行: 
    C:\abs\src>lin -u alpha.c 
    其中-u是單元選項,使用-u后可以關閉一些檢查多模塊時會產生的告警,例如“函數未被 
    使用”或“函數沒有定義”等。 
    也可以不使用LIN.BAT批處理文件,而直接使用LINT命令。在DOS環境下LINT命令為LINT.E 
    XE,在Windows95/NT環境下為LINT-NT.EXE,在OS2環境下為LINT-OS2.EXE。直接使用LINT 
    命令要注意的一點是要在使用前預先設置LINT目錄所在路徑,最好的方法是把該路徑加在 
    AUTOEXEC.BAT文件中。其它的使用方法與使用批處理文件相同。例如: 
    C:\abs\src>lint-nt -ic:\lint\ std.lnt -os(_lint.tmp) *.c 
    3.2用開發環境進行LINT 
    也可以使用開發環境來執行LINT操作,一般開發環境都支持運行可執行文件,但不一定支 
    持運行批處理文件,下面用Source Insight , Ultra Edit, MSVC 6.0 來舉例說明如何在 
    開發環境下進行LINT。 
    3.2.1 在Source Insight中集成 
    如果你在安裝過程中選定了使用某個開發環境,安裝程序會在你安裝的目錄下生成一個en 
    v-xxx.lnt的文件,例如選擇了Source Insight就會有一個env-si.lnt文件。用編輯器打開 
    該文件,在該文件開始的注釋中說明了如何將PC-LINT功能集成在開發環境中,集成在Sou 
    rce Insight中的過程如下: 
    1)從Options菜單中選擇“Custom Commands”命令項。 
    2)在Name欄中輸入“PC-lint ”,原則上這個名稱可以隨便起,只要你能搞清楚它的含義 
    就可以了。 
    3)在Run欄中輸入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你P 
    C-LINT的安裝目錄。 
    4)在Output欄中選擇“Iconic Window”、“Capture Output”。 
    5)在Control欄中選擇“Save Files First”。 
    6)在Source Links in Output欄中選擇“Parse Links in Output”、“File,then Lin 
    e”。 
    7)在Pattern欄中輸入“^\([^ ]*\) \([0-9]+\)”。 
    8)點Add鍵加入該命令。如下圖: 
    9)使用時,在Source Insight下打開要LINT的文件,打開Options菜單中的“Custom Com 
    mands”命令項,在“Command”欄中選擇“PC-lint unit check”命令運行即可。 
    注意到我的Run一欄的參數和上面的提示不一樣,其實我的其他古怪參數都放到c:\lint\s 
    td.lnt中了。請注意,不論你怎樣配置參數一定不要忘記了將si-env.lnt包含在你的配置 
    文件里,否則就無法進行錯誤信息和程序的自動對應了。 
    為了使用方便,你還可以配置一下Menu按鈕,將它加到系統菜0單里,這屬于一般性的 
    Source Insight應用,筆者就不在此贅述了。 
    第二筆者在NT中使用Source Insight時,好象集成不了,原因暫時不明了。上面的例子在 
    WIN 95下測試成功。 
    如果要修改LINT選項,可直接在Run欄中修改,也可專門編輯一個*.lnt文件放在c:\lint目 
    錄下,并將該文件名加入Run欄中,和命令行方式是一樣的。 
    3.2.2在Ultra Editor中集成 
    選取 Menu | Advanced | Tool Configuration ... , 顯示如下圖: 
    1)點按“Insert", 
    2)在command line:中填寫:c:\lint\lint-nt c:\lint\std.lnt %f 
    3)在Menu Item中填寫:PC-LINT 
    4)在Command Output中選擇: (x) Output to List Box 和 (x) Capture Output 
    5)點按"OK" 
    如圖所示的配置筆者在UE6.0 / NT 4.0 下測試成功。 
    3.2.3 在MSVC 6.0中集成 

    //這個好使過
    基本原理是一樣的: 
    1)選取 menu | tools | customize..... 
    2)選取 Tools Tab: 
    3)點按主對話框上方的虛線小方框 New a tool item 
    4)輸入 name: PC-LINT 
    5)輸入 Command: c:\lint\lint-nt.exe 
    6)輸入 Arguments: c:\lint\std.lnt $(FilePath)  //注:替std.lnt為lnt\env-vc6.lnt
    7) 選擇 (x) Use Output Window 
    8)Close 
    完成后,在tools菜單下就會有一項PC-LINT選項。 
    下面是筆者在VC6 / Win NT 4.0 的情況下的TOOL配置圖: 
    3.3LINT選項 
    LINT選項可以放在注釋中,例如: 
    /*lint option1 option2 ... optional commentary */ 
    //lint option1 option2 ... optional commentary 
    選項間要以空格分開,lint命令一定要小寫,并且緊跟在/*或//后面,不能有空格。如果 
    選項由類似于操作符和操作數的部分組成,例如-esym(534, printf, scanf, operat or 
    new),其中最后一個選項是operator new,那么在operator和new中間只能有一個空 
    格。 
    選項還可以放在宏定義中,例如: 
    #define DIVZERO(x) /*lint -save -e54 */ ((x) /o) /*lint -restore */ 
    LINT的選項很多共有300多種,大體可分為以下幾類: 
    1)錯誤信息禁止選項 
    該類選項是用于禁止生成某類錯誤信息的選項,最常用的是-e和+e,-e是禁止生成某類錯 
    誤信息,+e是恢復生成某類錯誤信息。運行lint目錄下的msg.exe可以得到msg.txt文件, 
    這個長達5000行的文件包含了所有的錯誤信息號和解釋。 
    -w 對于所有大于級別的告警信息都不顯示。 
    -wlib()對于所有大于級別的關于庫函數數的告警信息都不顯示。我們可以用-wlib(0)來屏 
    蔽所有的庫函數的告警信息,-wlib(1)只顯示庫函數中的句法錯誤。 
    -esym(#,) 可以屏蔽對于特定符號的某告警信息。 
    2)變量類型大小選項 
    不同的目標機、編譯系統變量類型的的大小(如短整形變量、整形變量等)會有所不同, 
    該類選項用于為目標機設置變量類型的大小。由于默認的設置與大部分的編譯器是匹配的 
    ,這些專門的設置通常情況下是不需要的,只在特別的目標機結構中才用。例如一個M680 
    00目標機,它的int類型和指針類型通常是32bit的,這時你應該使用選項:-si4 
    -sp4。這些尺寸參數的當前值可以通過help屏來獲得,例如可以輸入以下命令行: 
    lin -si4 -sp4 ? 
    3)冗長信息選項 
    冗長信息指的是LINT過程中產生的一些與編譯過程有關的信息,而不是真正的告警信息、 
    錯誤信息等。是否生成這些信息可以通過-v和+v選項來決定。+v是生成這些信息,-v是關 
    閉這些信息,這組選項中除+v外,其它所有選項都可以關閉+v選項。 
    4)標記選項 
    以+f、++f、-f和--f開頭的選項是標記選項。他們的邏輯含義分別如下: 
    +f...:通過把標志置為1而把它置為ON 
    -f...:通過把標志置為0而把它置為OFF 
    ++f...:標志增1 
    --f...:標志減1 
    后面兩個用于你想在局部把一個標志置為ON的情況,而不影響全局設置。例如你可以這樣 
    使用: 
    /*lint ++flb */ 
    int printf( ); 
    /*lint --flb */ 
    標記選項的種類很多,基本含義是用于打開或關閉某類語法情況使用,例如允許使用縮寫 
    結構體名稱,允許使用無名聯合體,把所有模塊當作C++編譯等。 
    5)消息顯示選項 
    消息顯示選項用于定義消息輸出格式。主要有消息高度選項、消息寬度選項、消息格式選 
    項等。 
    6)其它選項 
    其它選項中的種類很多,各種類間差異很大,在這里就不一一介紹了,建議大家看一看《 
    PC-LINT》一書,第五章有對每種選項的詳細說明。lint本身也有一些說明信息, lint-n 
    t 2> lint.txt 然后狂按幾個回車就可以生成一個lint選項的說明文件。 
    4.LINT一個工程下的多個C文件 
    4.1為何要LINT多個C文件 
    在程序編碼初期,我們關心的可能只是單個C模塊種中的語法問題,等到編程后期,對于由 
    多個C模塊組成的程序,我們希望了解當把多個模塊連接在一起后是否還有存在于模塊間的 
    語法問題。這時編譯器雖然能給出一些告警,但PC-LINT的連接能給出更多的告警。還有當 
    我們能保證其中的幾個模塊相對穩定,而另外幾個模塊仍有問題時可以先將幾個穩定的模 
    塊編譯連接成一個目標文件,文件每次修改完成后先單獨編譯,然后連接入總的目標文件 
    。 
    4.2如何LINT一個工程下的多個C文件 
    象我們平時使用的編譯工具一樣,PC-LINT在編譯連接多個C文件時也會先把每個C文件編譯 
    生成中間的目標文件*.lob,然后再將所有的LOB文件連接在一起。LOB是Lint Object Mod 
    ule的縮寫。這個文件中包含了一個C或C++模塊的所有外部信息。生成LOB文件時有三種選 
    項要注意:第一種是-u,如果要LINT生成LOB文件,就一定要加-u選項;第二種是-zero或 
    -zero(500)選項,為了保證LOB文件在模塊存在錯誤的情況下也能生成,就一定要加這個選 
    項;第三種是-oo[(filename)],filename是生成的LOB文件的名稱,在-oo后面,可加,也 
    可不加,如不加,則LOB文件名與原C模塊的名稱相同,例如: 
    lint -u alpha.c -oo(a1) 
    生成的LOB文件名為:a1.lob 
    lint -u alpha.c -oo 
    生成的LOB文件名為:alpha.lob 
    LINT一個工程下的多個C模塊,在用戶的源程序目錄下一般需要三個文件: 一個選項文件 
    (*.lnt)、一個批處理文件(*.bat)和一個MAKEFILE文件(*.mak)。下面一一講述如何 
    制作這些文件。 
    1)選項文件(*.lnt) 
    選項文件在前面也提到過,你可以把你LINT每個C文件時時用到的所有公共選項羅列在該文 
    件中,選項生效的順序按照從左到右,從上到下的原則。該類文件可以層層嵌套,嵌套的 
    層數沒有限制。例如make.lnt文件: 
    -iC:\lint 
    std.lnt 
    +os(temp) 
    -e46 
    +vm 
    -zero 
    2)批處理文件(*.bat) 
    制作批處理文件時要注意要在該文件中調用TCMAKE.EXE文件和MAKEFILE文件,例如lintma 
    ke.mak文件: 
    @echo Lint Making 'makelap': 
    tcmake -flintmake.mak 
    @echo End of making 
    3)MAKEFILE文件(*.mak) 
    MAKEFILE使用的TCMAKE的語法,和我們平時開發編譯時使用的MAKEFILE文件語法格式一樣 
    ,例如下面的lintmake.mak文件: 
    MCCPATH = c:\mcc68k 
    OPTION = -u make.lnt -oo 
    GLOBLE = os.h l2lap.h 
    mail_depend = $(GLOBLE) q931.h mail.h 
    lapmain_depend = $(GLOBLE) l1pubdef.h q931.h mail.h 
    lapos_depend = $(GLOBLE) 
    fhdlc1_depend = $(GLOBLE) cpuhdlc.h bd_prar.h q931.h 
    OBJ = mail.lob lapmain.lob lapos.lob fhdlc1.lob 
    project.lob : $(OBJ) 
    lint-nt make.lnt -e768 -e769 *.lob 
    mail.lob: mail.c $(mail_depend) 
    lint-nt $(OPTION) mail.c 
    lapmain.lob: lapmain.c $(lapmain_depend) 
    lint-nt $(OPTION) lapmain.c 
    lapos.lob: lapos.c $(lapos_depend) 
    lint-nt $(OPTION) lapos.c 
    fhdlc1.lob: fhdlc1.c $(fhdlc1_depend) 
    lint-nt $(OPTION) fhdlc1.c 
    4.3簡單的LINT多個文件 
    假設我們的工程不復雜,我們可以負擔起每次都將所有的文件都lint一遍的開銷,也可以 
    不使用上面的正規用法。筆者在實踐中發現,將所有的*.c文件放在一個lint命令中,同樣 
    能完成lint整個工程的目的。 
    如: 
    lint-nt c:\lint\std.lnt AllMySource.lnt 
    在AllMySource.lnt中包括你的工程中的所有源文件: 
    a1.c 
    a2.c 
    a3.c 
    需要注意的是,在std.lnt文件中就不需要-u選項了。因為我們已經提供了所有的信息 

    posted on 2007-05-24 10:46 jinfeng_wang 閱讀(3199) 評論(1)  編輯  收藏 所屬分類: cppZZ

    評論

    # re: PCLint (zz ) 2009-07-31 10:02 szwatertek
    自動代碼規則檢查工具QAC的功能

    QAC是自動代碼規則及安全性檢查工具,自動檢查軟件代碼對編程標準的符合性。QAC是唯一能夠完全支持國軍標C語言編程規范的工具、唯一完全支持嵌入式C語言編程規范MISRA 2004的工具。QAC自有規則1300多條,涵蓋了C語言使用的各個方面,并且支持規則定制,能夠完全實現對各種C編程規范的支持。
    QAC從代碼安全性、可移植性、可維護性、可測試性等方面檢查軟件代碼,切實提高軟件代碼的質量。QAC的規則都有詳細的解釋和代碼示例,通過QAC施行代碼規則檢查能夠加深提高編程人員對語言的理解,從根本上提高軟件開發質量和軟件代碼質量。
    自動生成符合國軍標的中文測試報告。圖形顯示函數結構、調用關系,方便快速理解代碼。自動統計超過40種代碼質量度量,圖形化地分析管理軟件質量。
    QAC使用簡單,分析速度快,占用資源少,90秒分析萬行代碼。

    歡迎來電咨詢 0755-26727508 深圳旋極  回復  更多評論
      

    主站蜘蛛池模板: 亚洲不卡影院午夜在线观看| 国产成年无码久久久免费| 一级午夜免费视频| 黄色免费网站网址| 国产亚洲欧洲Aⅴ综合一区| 亚洲熟女综合色一区二区三区 | 久久亚洲精品无码aⅴ大香 | 中文字幕无码播放免费| 国产成人亚洲综合a∨| 国拍在线精品视频免费观看| 亚洲精品熟女国产| 久久精品无码专区免费青青| 亚洲日韩欧洲无码av夜夜摸| 永久免费精品影视网站| 亚洲AV无码一区二三区| 免费的黄色网页在线免费观看| 国产一区二区三区免费视频| 亚洲色大成网站www| 久久精品国产精品亚洲精品| 中文字幕在线视频免费| 一本久久a久久精品亚洲| CAOPORN国产精品免费视频| 一本色道久久综合亚洲精品| 久久久www成人免费毛片| 亚洲伊人久久大香线焦| 在线视频精品免费| 精品久久久久久国产免费了| 亚洲精品无码高潮喷水A片软| 免费看的成人yellow视频| 亚洲а∨精品天堂在线| 亚洲中文字幕精品久久| 亚洲毛片αv无线播放一区 | 亚洲视频在线观看地址| 亚洲男人的天堂在线va拉文| 最近中文字幕免费大全| 亚洲人成影院在线| 无码国产精品一区二区免费| 免费无码又爽又刺激网站 | 最新久久免费视频| 亚州**色毛片免费观看| 久久精品国产亚洲AV电影网|