• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    西西首頁 常用軟件 軟件下載 安卓軟件 游戲下載 安卓游戲 MAC應用 驅動下載 安卓電視
    系統工具網絡工具媒體工具圖形圖像聊天工具應用軟件編程開發手機軟件安卓應用電腦安全字體素材

    pc lint

    v9.0 最新版
    • pc lintv9.0 最新版
    • 軟件大小:7.8M
    • 更新時間:2014-04-03 10:11
    • 軟件語言:中文
    • 軟件廠商:
    • 軟件類別:國產軟件 / 免費軟件 / 編程工具
    • 軟件等級:4級
    • 應用平臺:WinAll, Win7
    • 官方網站:暫無
    好評:50%
    壞評:50%

    裝機必備軟件

    軟件介紹

    PC-Lint是一款C/C++軟件代碼靜態分析工具,不僅可以檢查一般的語法錯誤,還可以檢查潛在的錯誤,比如數組訪問越界、內存泄漏、使用未初始化變量、使用空指針等。在單元測試前使用PC-Lint來檢查代碼,可以提前發現程序中的潛在的錯誤,提高代碼
    的質量。

    PC-Lint安裝:

    1.1 安裝PC-lint
    (1)下載PC-lint(PC-Lint 8.00w)。
    (2)將下載的壓縮包解壓至到D盤,并對文件夾重命名為PC-Lint,這樣路徑為D:/PC-Lint。
    1.2 將PC-lint集成到VC6.0
    1.2.1 對單個C/C++進行靜態代碼分析
    (1)將D:/PC-Lint/lnt 下的3個文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt復制到D:/PC-Lint/下。
    (2)打開co-msc60.lnt,將該文件倒數第二行"lib-ole.lnt"的內容改為"D:/PC-Lint/lnt/lib-ole.lnt",也就是在前面加上絕對路徑,以免在后面的步驟中無法找到該文件。
    (3)在D:/PC-Lint/下創建std.lnt和options.lnt兩個文件,其中std.lnt的內容如下:

    注:-i后面的路徑名為VC 6.0的安裝路徑和及其頭文件路徑;options.lnt可以暫時為空。
    (4)在VC6.0的菜單欄中,Tools--->Customize...-->tools 新建一個名為pclint的項,在下面填入
    "Command"項填入: D:/PC-Lint/lint-nt.exe
    "Argument"項填入: -u D:/PC-Lint/std.lnt  D:/PC-Lint/env-vc6.lnt "$(FilePath)"

    然后在Use Output Window 打上勾即可。
    (5)在VC6.0的菜單欄Tools下多了一個pclint選項,打開一個VC項目后,就可以使用該選項對單個C/C++文件進行靜態代碼分析了。

    1.2.2 對一個VC6.0項目進行靜態代碼分析
    下面的步驟是在1.2.1的前三步的基礎上進行的。
    (1)先到http://www.weihenstephan.de/~syring/win32/UnxUtils.zip下載UnxUtils.zip。需要利用unix中的find等命令來查找當前目錄下的C和C++文件,然后再將它們送給lint程序處理。
    (2)解壓UnxUtils.zip到D盤,這樣路徑為D:/UnxUtils。
    (3)在在VC6.0的菜單欄Tools下多了一個pclint_prj選項,打開一個VC項目后,就可以使用該選項對單個C/C++文件進行靜態代碼分析了。
    "Command"項填入: D:/UnxUtils/usr/local/wbin/find.exe
    "Argument"項填入: $(FileDir) -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt

    然后在Use Output Window 打上勾即可。
    (4)在VC6.0的菜單欄Tools下多了一個pclint_prj選項,打開一個VC項目后,就可以使用該選項對VC項目進行靜態代碼分析了。
    注意:"Argument"項填的內容一定要注意參數中的路徑,如果你不使用上述路徑,可以用新路徑將參數中的路徑替換,以免重新寫參數而導致出錯。

    1.3 將PC-lint集成到Source Insight 3.5中
    1.3.1 對單個C/C++進行靜態代碼分析
    (1)打開SourceInsight, 選擇Options-->Custom Commands-->Add, 輸入pclint
    (2)在Run中填寫: D:/PC-Lint/lint-nt -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt %f
    (3)Dir不用填寫,將Iconic Window, Capture Output, Parse Links in OutPut,三項勾選上,并將File,then Line的單項選擇也選上。
    (4)然后點右側的Menu...,在彈出的界面中在下拉框Menu中選擇View,然后在下面的Menu Cotents中選擇<end of menu>, 右側點Insert即可。
    (5)可以在Source Insight 3.5菜單View下看到剛才新建的項pclint,打開項目的任意一個待分析的源文件,運行pclint即可進行靜態代碼分析了。

    1.3.2 對一個項目進行靜態代碼分析
    下面的步驟是在1.2.2的基礎上進行的。
    (1)打開SourceInsight, 選擇Options-->Custom Commands-->Add, 輸入pclint_prj
    (2)在Run中填寫: 
    D:/UnxUtils/usr/local/wbin/find.exe %d -name *.c -o -name *.cpp | D:/UnxUtils/usr/local/wbin/xargs D:/PC-Lint/lint-nt -i"D:/UnxUtils/usr/local" -u D:/PC-Lint/std.lnt D:/PC-Lint/env-vc6.lnt
    (3)Dir不用填寫,將Iconic Window, Capture Output, Parse Links in OutPut,三項勾選上,并將File,then Line的單項選擇也選上。
    (4)然后點右側的Menu...,在彈出的界面中在下拉框Menu中選擇View,然后在下面的Menu Cotents中選擇<end of menu>, 右側點Insert即可。
    (5)可以在Source Insight 3.5菜單View下看到剛才新建的項pclint_prj,打開項目,運行pclint_prj即可對項目進行靜態代碼分析了。

    PC-Lint使用:

    2.1 pc-lint目錄下幾個重要的文件及程序
    lint-nt.exe:PC-lint的可執行程序。
    config.exe: PC-lint的配置文件程序。
    pc-lint.pdf:PC-lint的PDF格式的在線手冊,本文的大部分內容是從中得來的。
    msg.txt:     對于錯誤消息編號的詳細解釋。
    Lnt/:       這個目錄下有些東西還是值得認識一下。
    co-....lnt: 指定的編譯器的可選編譯文件。
    co.lnt:     通用的可選編譯文件。
    sl-....c     非ANSI編譯器的標準庫文件模塊
    sl.c:        非ANSI編譯器的通用標準庫文件模塊
    env-....lnt:不同平臺下的可選文件,包括MS Visual Studio和其他各種編輯工具。
    lib-....lnt:可選文件, 特定的"有挑戰性"的庫文件。
    au-....lnt: 可選文件, 作者們推薦的檢測條件。

    2.2 PC-lint的介紹
    2.2.1 錯誤信息編號
    對于大部分的錯誤消息,PC-lint都提供了一個關聯的錯誤編號。小于1000的錯誤編號是分配給C語言的,1000以上的錯誤編號則是分配給C++語言的。1000呢?呵呵,被保留了。先看一個表格。
                                     C              C++           告警級別
    語法錯誤(Syntax Errors)      1   - 199      1001 - 1199           1
    內部錯誤(Internal Errors)    200 - 299                            0
    致命錯誤(Fatal Errors)       300 - 399                            0
    告警(Warnings)               400 - 699      1400 - 1699           2
    提示(Informational)          700 - 899      1700 - 1899           3
    可選信息(Elective Notes)     900 - 999      1900 - 1999           4

    對于C語言,1~199是與語法錯誤;200~299是PC-lint內部錯誤,應該決不會發生的;300~399是致命錯誤,通常是由于超越了某些限制;400~699是警告消息,提示被檢查的程序中可能存在錯誤;700~899是提示信息,這些提示信息可能有錯誤,也可能是合法的程序,取決于個人的編程風格;900~999則是一些稱為可選信息,一般不會自動輸出。

    PC-lint提供了高級級別設置選項-wLevel,缺省的級別為3級。-w0, -w1 , -w2, -w3, -w4 分別可以生成上述表格中對應告警級別和級別更低的告警,其中級別越低告警越重要。同樣,也提供了處理庫函數的頭文件告警級別的選項-wlib(Level),缺省的級別也是3級,級別對應的含義與前者一樣。

    2.2.2 選項的規則
    通過使用加號"+"和減號"-",以注釋的形式插入代碼中,來恢復和屏蔽指定的被檢查的選項。格式如下:
    /*lint option1 option2 ... optional commentary */ 
    或者
    //lint option1 option2 ... optional commentary
    注意:lint必須是小寫,選項的一行不能超過80個字符,否則導致致命的錯誤,錯誤信息的編號就是323。如果選項確實有很長,可以通過換行的方式來實現。另外屏蔽和恢復的選項的代碼可以放在宏定義中,宏被展開后,這些選項會生效。

    2.2.3 選項中的空格
    因為空格是用來分隔選項的,除此之外只能出現在圓括號的旁邊或是空格自身被引用(例如operator new按語法要求中間就有空格)。舉個例子:
    -esym(534,printf,scanf,operator new)
    -esym(534, printf, scanf, operator new)
    -esym( 534 , printf , scanf , operator new )
    對于第三個,空格出現在圓括號的旁邊,也出現在自身被引用的地方(operator new)。另外operator和new之間出現兩個空格也是不合法的,因為它違反了語法規則。另外,也可以使用雙引號("")來保護空格,例如:
    -"dWORD=unsigned short"

    2.2.4 選項的分類
    PC-lint的選項有300多種,可以分為下面幾類:
    (1)禁止錯誤信息
    選項開頭使用"-e"可以禁止指定的錯誤消息,使用"+e"恢復指定的錯誤消息。如果禁止消息,只不過不讓消息輸出,并不影響PC-lint的處理過程。順便提一下前面提到的"-wLevl",這個選項是禁用指定級別及以上的消息的顯示。

    1)格式一:
    -e#  禁止指定的錯誤消息,#代表數字或是數字匹配符,錯誤消息的編號為#。
    +e#  恢復指定的錯誤消息,錯誤消息的編號為#。

    舉個例子:
    /*lint -504*/
    ...Code.....
    /*lint +504*/
    第一行關閉了編號為504的錯誤消息,最后一個行則重新打開了編號為504的錯誤消息。其中數字也可以包含匹配符號,'?'匹配單個字符,"*"匹配多個字符。
    比如:
    (1)-e7???, 則關閉了700~799這個范圍內的錯誤消息。
    (2)-e1*, 則關閉了所有以1開頭的編號的錯誤消息。
    同樣匹配符也能使用在-esym, -elib, -elibsym, -efile, -efunc, -emacro, -etemplate, -e(#), --e(#), -e{#} and –e{#}.

    2)格式二:
    -e(#[,#]...) 為下一個表達式禁止指定的錯誤消息,在這個表達式結束后被禁止的錯誤消息自動恢復,#代表數字或是數字匹配符,錯誤消息的編號為#。
    舉個例子:
    a = /*lint -e(413) */ *(char *)0;
    它等價于下面的語句:
    a = /*lint -save -e413 */ *(char *)0
    /*lint -restore */;
    前一種方法更簡單且更有效。

    3)格式三:
    --e( # [,#]... ) 比上面的那個管的更寬一些,它對整個表達式有效,舉個例子就明白它與上面的區別了。
    舉個例子:
    a = /*lint --e(413) */ *(int *)0 + *(char *)0;
    整個表示式是指*(int *)0 + *(char *)0,下個一表達式指的是*(int *)0。區別一目了然,例子中將禁止兩個編號為413 的錯誤消息, 如果使用 -e(413) ,則只禁止第一個編號為 413 的錯誤消息。

    4)格式四:
    -e{ # [, #] …} 對下一個語句或者聲明有效
    舉個例子:
    //lint -e{715} suppress "k not referenced"
    void f( int n, unsigned u, int k )
    {
        //lint -e{732} suppress "loss of sign"
        u = n; // 732 not issued
        //lint -e{713} suppress "loss of precision"
        if(n)
       {
           n = u; // 713 not issued
       }
    } // 715 not issued
    通過例子可以看出,這種格式放在函數之前,則對整個函數產生作用,放在賦值語句前則只對賦值語句起作用,放在if或while前面,則對這一段語句起作用。在C++的類定義或命名空間聲明前放這么個選項,則將整個類或命名空間內的代碼中指定的錯誤消息給禁止了。

    5)格式五:
    --e{ # [, #] … } 對于其所處的 {} 號區域內的整個代碼體有效。 {} 號區域可能是復雜的語句、函數體、C++的類,結構體或聯合體的定義、C++的命名空間等。如果這個選項放在一個模塊前,而模塊前沒有 {},則對整個模塊生效。

    6)格式六:
    !e# 僅對其所在行有效。
    if( x = f(34) ) //lint !e720
    y = y / x;
    在這個例子中,僅對那一行禁止編號為720 的錯誤消息??匆幌翪語言的代碼的用法:
    if( x = f(34) ) /*lint !e720 */
    y = y / x;
    如果有更多的錯誤信息要禁止,而又無法使用通配符,則可以使用下面的方法:
    n = u / -1; //lint !e573 !e721

    7)格式七:
    -ealetter 參數不匹配禁止

    8)格式八:
    -efile( #, file [, file] ... ) inhibits and
    +efile( #, file [, file] ... ) re-enables

    9)格式九:
    -efunc( #, Symbol [, Symbol] ... ) inhibits and
    +efunc( #, Symbol [, Symbol] ... ) re-enables

    10)格式十:
    -elib( # [, #] ... ) inhibits and
    +elib( # [, #] ... ) re-enables

    11)格式十一:
    -elibsym( # [, # ] ... ) inhibits
    +elibsym( # [, # ] ... ) re-enables

    12)格式十二:
    -emacro( #, symbol, ... ) 
    +emacro( #, symbol, ... )

    13)格式十三:
    -emacro( (#), symbol, ... ) 
    --emacro( (#), symbol, ... ) 
    -emacro( {#}, symbol, … ) 
    --emacro( {#}, symbol, … )

    14)格式十四:
    -esym( #, Symbol [, Symbol] ... ) inhibits and
    +esym( #, Symbol [, Symbol] ... ) re-enables
    禁止和恢復指定的符號的錯誤消息。舉個C++的例子(實際應用中不太可能出現):
    class X
    {
        void f(double, int);
    };
    分析結果中會提示某行的member X::f(double, int)沒有被引用,為了屏蔽這個消息,你可以使用
    -esym( 754, X::f )
    符號的完整簽名為X::f(double, int),然而符號的名字為X::f,而且可以使用符號的名字來禁止錯誤消息的出現。另外,-esym 和 -e# 選項是獨立的,舉個例子:
    -e714 +esym( 714,alpha )
    對于alpha來說,它禁止了編號為714的錯誤消息,第二個選項并不會恢復編號為714的錯誤消息,除非前面有個對應的-esym(714,alpha)。

    15)格式十五:
    -etd( TypeDiff [, ...] ) inhibits
    +etd( TypeDiff [, ...] ) re-enables

    16)格式十六:
    -etemplate( # [,#] ... ) 
    +etemplate( # [,#] ... ) 
    禁止和恢復在擴展模板(expanding templates)時的錯誤消息。

    (2)變量類型大小和對齊選項
    1)變量類型大小選項
    這組選項允許設置各種變量類型的大小和對齊方式。由于默認的設置于絕大多數的編譯器都是一致的,所以這些參數的單獨設置通常是沒有必要的。使用變量類型大小的選項是為了特定的架構,而不是本地架構。舉個例子,你需要為嵌入式系統設置int和pointers通常為16位,那么你應該指定:
    lint -si2 -sp2 ...
    下面的列表,#號代表一個小的整型值,僅舉幾個:
    -sb# 字節的位數為#,默認的是-sb8,
    -sbo# sizeof(bool)就變為一個參數了,默認值為1,
    -sc# sizeof(char) 就變為 #,默認值為1,
    -slc# sizeof(long char) 就變為 #,默認值為2,
    ...
    2)對齊選項
    僅有兩個可選擇的注釋信息來檢測不規律的對齊,它們的錯誤編號是958和959,詳細的介紹就省略了吧。

    (3)冗長信息選項 
    冗長信息選項采用-v和+v開頭來控制,冗長信息指的是在檢測過程中產生的一些與編譯過程有關的信息,或者說,冗長信息與編譯過程中消息的頻率和種類有關。如果使用-v,則冗長信息進被發送到標準輸出,而是用+v,冗長信息進則會被發送到標準輸出和標準錯誤中。如果要將錯誤信息重定向到一個文件中,并想要在終端查看冗長信息和被解釋后的錯誤消息,+v選項是非常有用的。

    (4) 標志選項 
    采用+f,++f,-f,--f開頭開介紹標志位。一個標志位在內部采用一個整型值表達。通過認為:
    ON  假如整型值大于0
    OFF 假如整型值小于或等于0
    默認設置時1為ON,0為off,對于的關系如下:
    +f...:通過把標志為設置為1而把它設置為ON 
    -f...:通過把標志為設置為0而把它設置為OFF 
    ++f...:標志位增1 
    --f...:標志位減1 
    后面兩個選項在只設置局部標志而不影響全局設置時,非常有用。

    (5)消息顯示選項 
    消息顯示選項用于定義消息輸出的格式。
    1)控制錯誤消息的高度。
    -h選項被用來控制消息的高度,通常的格式如下:
    -h[s][F][f][a][b][r][mn][m][m/M/][I]N
    s 表示每條消息后的空格。其他的就不介紹了。
    2)控制錯誤消息的寬度。
    格式如下:
    -width(W,Indent)
    例如:-width(99,4)
    3)消息格式化選項
    格式如下
    -format=...
    3)附加信息選項
    格式如下:
    -append(errno,string)
    (6)其他選項
    1)-A 要求嚴格使用ANSI C/C++處理。
    其他的不介紹了。

    2.2.5 庫文件檢查
    這里的庫文件時指那些編譯后的庫文件,比如標準的I/O庫,又比如第三方的庫文件,例如windows的庫文件。關注庫文件的重要特色是因為以下兩點:
    (1)庫文件的源代碼通常不可獲得。
    (2)庫文件在多個正被你使用pc-lint檢查的程序中使用。
    庫的頭文件描述了庫的部分或完整的接口。舉個例子:
    hello.c
    #include <stdio.h>
    main()
    {
        HelloWorld();
        printf( "hello world/n" );
    }

    如果沒有"#include <stdio.h>"這一行代碼,使用PC-lint檢查上述代碼,PC-lint會抱怨printf()既沒有聲明也沒有定義,會給出編號為718錯誤信息。如果"stdio.h"被當做一個庫文件的頭文件,那么PC-lint不會要求給出printf()的源代碼。

    (1)格式一:
    +libclass( identifier[, identifier] ... )
    用來指定名為identifier的頭文件當做庫頭文件。identifier是其中下面之一:
    angle: 所有尖括號包含起來的頭文件
    foreign:所有在搜索列表中目錄下的頭文件
    ansi:標準ANSI C/C++ 的頭文件
    all:所有頭文件
    默認情況下,+libclass(angle,foreign) 是有效的,這也是為什么hello.c的代碼沒有要求給出printf()源代碼的原因。
    (2)格式二:
    +libdir( directory [, directory] ... ) 
    -libdir( directory [, directory] ... ) 
    指定目錄的。
    (3)格式三:
    +libh( file [, file] ... ) 
    -libh( file [, file] ... ) 
    增加或移出那些已經被 +libclass 和 +/-libdir 已確定的頭文件,以達到要求或不要求給出源代碼。舉個例子:
    +libclass( ansi, angle )
    +libh( windows.h, graphics.h )
    +libh( os.h ) -libh( float.h )
    要求所有的ansi和angle(除了float.h),還有那三個windows.h, graphics.h, os.h也會被當做庫頭文件。

    2.2.6 強類型檢查
    什么是強類型?C/C++的變量都有類型,不同類型之間的賦值可能會產生告警,可以說C/C++變量的類型是強類型。有強類型,自然有弱類型。比如一些腳本語言,它們的變量就不存在具體的類型,可以相互之間賦值,它們就是弱類型語言。為什么在使用PC-lint對C/C++進行檢查時,要進行強類型檢查呢?因為有諸如使用typedef定義的數據類型,可以避開編譯器的類型檢查。舉個例子:
    typedef int Count;
    typedef int Bool;
    Count n;
    Bool stop;
    ...
    n = stop ;

    對于這段代碼,編譯器是不會告警的,但是最后一行代碼是錯誤的。所以,強類型檢查選項是必要的。
       強類型檢查選項"-strong"和附加選項"-index"可以完全的或部分的對typedef定義的數據類型進行強類型檢查,保證相同類型的變量才能相互賦值。
    (1)強類型檢查選項strong的格式如下:
    -strong( flags[, name] ... )
    name是強類型,flags是指定的屬性,flags參數可以是A、J、X、B、b、l和f。如果name被省略,所有使用typedef定義的數據類型的flags的屬性不能被其他的-strong選項所識別。

    flags參數  弱化字符
       A       i 忽略初始化
               r 忽略Return語句
               p 忽略參數傳遞 
               a 忽略賦值操作
               c 忽略將常量賦值(包括整數常量、常量字符串等)給強類型的情況
               z 忽略Zero賦值

       X       當把強類型的變量賦值給其他變量的時候進行類型檢查。弱化參數i, r, p, a, c, z同樣適用于X并起相同的作用。
       J       當強類型與其它類型進行運算時(邏輯運算、關系運算、數學運算等)進行檢查
               e 忽略==、!=和?:操作符
               r 忽略>、>=、<和<=
               o 忽略+、-、*、/、%、|、&和^
               c 忽略該強類型與常量進行以上操作時的檢查
               z 忽略該強類型與Zero進行以上操作時的檢查
       B       類型是Boolean,一般情況下只能使用一個name(指格式中的name), 而且它應該和其他flags聯合使用。
               B選項有兩個作用:
               1. 出于強類型檢查的目的,每一個Boolean操作符都采用返回一個和Type兼容的類型。Boolean操作符就是那些顯示
                  為true或false,也包括前面提到的四種關系運算符和兩種等于判斷符,取反操作符!,二元操作符&&和||。
               2. 在所有需要判斷Bolean值的上下文中,比如if語句和while語句,都應該檢查這個強類型,否則產生告警。
       b      僅僅假定每一個Bolean類操作符都將返回一個與Type類型兼容的返回值。與B選項相比,b選項的限制比較寬松。 
       l      庫標志,當強類型的對象從庫函數中獲得值,或者將強類型對象的值作為參數傳遞給庫函數等情況下,不產生告警。
       f      與B或b連用,表示不應該將1位長度的位域當做Boolean類型,否則表示1位長度的位域被缺省假定為Boolean類型。

       這些選項順序對功能沒有影響,但是A和J選項的弱化字符必須緊跟在它們之后。B選項和b選項不能同時使用,f選項必須搭配B選項或b選項使用,如果不指定這些選項,-strong的作用就是僅僅聲明type為強類型而不作任何檢查。下面用一段代碼演示-strong選項的用法:
    //lint -strong(Ab,Bool) <選項是以注釋的形式插入代碼中>
    typedef int Bool;
    Bool gt(int a, b)
    {
        if(a) return a > b; // OK
        else return 0; // Warning
    }
    代碼中,Bool被聲明成強類型,如果沒有指定b選項,第一個return語句中的比較操作就會被認為與函數類型不匹配。第二個return語句導致告警是因為0不是Bool類型,如果添加c選項,例如-strong(Acb,Bool),這個告警就會被禁止。
    (2) 另一個強類型檢查選項是index,格式如下:
    -index( flags, ixtype, sitype [, sitype] ... )
    這個選項是對strong選項的補充,它可以和-strong選項一起使用。這個選項指定ixtype是一個排他的索引類型,它可以和強索引類型sitype的數組(或指針)一起使用,ixtype和sitype被假定為后來使用typedef聲明來定義的的類型名稱。flags可以是c或d,c允許將ixtype和常量作為索引使用,而d允許在不使用ixtype的情況下指定數組的維數(Dimensions)。

    軟件標簽: pclint

    軟件截圖

    pc lint v9.0 最新版

      其他版本下載

      熱門評論

      最新評論

      發表評論 查看所有評論(0)

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)

      下載幫助下載幫助西西破解版軟件均來自互聯網, 如有侵犯您的版權, 請與我們聯系。

      TOP
      軟件下載
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>