




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.1.1.1.1 PC-LINT中的各種錯(cuò)誤信息都有一個(gè)相關(guān)的錯(cuò)誤號(hào),其中各個(gè)錯(cuò)誤號(hào)的分配區(qū)間如下:表1:PC-LINT錯(cuò)誤號(hào)區(qū)間分配錯(cuò)誤類(lèi)型錯(cuò)誤號(hào)C錯(cuò)誤號(hào)C+告警級(jí)別語(yǔ)法錯(cuò)誤1 -1991001-11991內(nèi)部錯(cuò)誤200-2990致命錯(cuò)誤300-3990告警400-6991400-16992提示信息700-8991700-18993可選的注解900-9991900-1999注:其中200-299號(hào)告警為PC-LINT的內(nèi)部錯(cuò)誤,一般不會(huì)發(fā)生,1.2 C語(yǔ)法錯(cuò)誤1.2.1 1未關(guān)閉注釋 (位置)文件結(jié)束的時(shí)候,仍然有一個(gè)未關(guān)閉的注釋存在,打開(kāi)的這個(gè)注釋位置將被顯示出來(lái)。1.2.2 2未關(guān)閉的
2、引號(hào)在行尾的時(shí)候,仍然存在一個(gè)同行的未關(guān)閉的引號(hào)(單引號(hào)或雙引號(hào))。1.2.3 3#else 沒(méi)有一個(gè)#if在一個(gè)區(qū)域內(nèi)有一個(gè)#else ,但是沒(méi)有一個(gè)#if, #ifdef 或#ifndef。1.2.4 4太多的#if 嵌套層次檢測(cè)出一個(gè)內(nèi)部的限制,有關(guān)#if的嵌套層次 (包括 #ifdef和#ifndef)。1.2.5 5太多的#endif 出現(xiàn)一個(gè)#endif ,但不是#if 或 #ifdef 或#ifndef.的。1.2.6 6堆棧溢出 一個(gè)內(nèi)置的不可展開(kāi)的堆棧被過(guò)分?jǐn)U展。可能是太多的嵌套的#if 語(yǔ)句、#includes 語(yǔ)句 (包括所有的遞歸的#include 語(yǔ)句),static
3、塊(有限制的括號(hào)) 或#define置換。1.2.7 7不能打開(kāi)include的文件:FileName FileName 是不能打開(kāi)的include文件的名字。,可以見(jiàn)flag fdi (見(jiàn)章節(jié)5.5 標(biāo)志選項(xiàng)),選項(xiàng) -i. (見(jiàn)章節(jié)5.7其它選項(xiàng)) 和章節(jié)13.2.1 INCLUDE 環(huán)境變量。1.2.8 8未關(guān)閉的#if (位置)一個(gè)#if (或 #ifdef 或 #ifndef) 沒(méi)有遇到相應(yīng)的#endif。位置是#if.的位置1.2.9 9太多的#else在#if (位置) 一個(gè)給定的 #if 包含一個(gè) #else,然后輪流流被緊跟另一個(gè) #else 或一個(gè) #elif。錯(cuò)誤消息給出
4、#if語(yǔ)句條件包含異常的行號(hào)1.2.10 10 期望的字符串字符串是期望的記號(hào),期望的記號(hào)不能被發(fā)現(xiàn)。當(dāng)一定的保留字沒(méi)有被認(rèn)出時(shí),給出這條消息,例如:int _interrupt f();將收到一個(gè) Expecting '' message at the f ,因?yàn)樗J(rèn)為你想聲明_interrupt。 改正的方法是建立一個(gè)新的保留字使用 +rw(_interrupt)。 同樣,保證使用正確的編譯器選項(xiàng)文件。見(jiàn)章節(jié)15.10 奇怪的編譯器.1.2.11 11超出大小范圍在#include l行確定的文件名的長(zhǎng)度超過(guò)了FILENAME_MAX 字符。1.2.12 12需要 <
5、 or “ -在一個(gè)#include I被檢測(cè)出來(lái)后和宏置換被執(zhí)行后,期望一個(gè)文件的規(guī)范格式<filename> 或 "filename" 1.2.13 13不好的類(lèi)型類(lèi)型形容詞例如long、unsigned 等等。不能應(yīng)用到緊跟的類(lèi)型。1.2.14 14 符號(hào) 'Symbol' 以前定義過(guò)(位置) 符號(hào)被定義第二次。提供出以前定義的位置,如果這是一個(gè)暫定的定義(沒(méi)有初始化),這個(gè)消息可以用+fmd flag抑制。(章節(jié)5.5Flag 選項(xiàng)).1.2.15 15符號(hào)'Symbol'重新被聲明(TypeDiff) (位置)符號(hào)被以前
6、聲明過(guò)或在其它模塊定義過(guò)(其它位置)的類(lèi)型和在當(dāng)前位置的聲明的類(lèi)型不同。參數(shù)TypeDiffr提供了類(lèi)型怎么不同的進(jìn)一步信息(見(jiàn)章節(jié)17. 信息).1.2.16 16不認(rèn)識(shí)的名字一個(gè)# 指示符后沒(méi)有跟著一個(gè)可認(rèn)識(shí)的單詞。如果這不是錯(cuò)誤使用+ppw 選項(xiàng)(章節(jié)5.7其它選項(xiàng)).1.2.17 17未被承認(rèn)的名稱A non-parameter is being declared where only parameters should be.1.2.18 18符號(hào)重新聲明(TypeDiff) 和此位置沖突一個(gè)符號(hào)被重新聲明。參數(shù)TypeDiff 提供類(lèi)型不同的進(jìn)一步信息(見(jiàn)Chapter 17. 信
7、息)。位置是先前定義的位置。1.2.19 19無(wú)效的聲明一個(gè)類(lèi)型獨(dú)自的出現(xiàn)而沒(méi)有相關(guān)的變量,類(lèi)型不是struct、union 和 enum. 一個(gè)雙分號(hào)能導(dǎo)致這個(gè):int x;1.2.20 20非法使用 =一個(gè)函數(shù)聲明后緊跟一個(gè)符號(hào).1.2.21 21期望對(duì)于不確定大小的數(shù)組的初始化必須以一個(gè)左括號(hào)開(kāi)始。1.2.22 22非法的操作符發(fā)現(xiàn)一個(gè)一元操作符緊跟一個(gè)操作數(shù),這個(gè)操作符不是一個(gè)post 操作符。1.2.23 23期望“:”-碰到一個(gè) ? 操作符, o但是沒(méi)有緊跟一個(gè)期望的 : 操作符。1.2.24 24期望一個(gè)表達(dá)式,但是得到一個(gè)字符串發(fā)現(xiàn)一個(gè)在一個(gè)表達(dá)式開(kāi)始的操作符,但是它不是一個(gè)一
8、元操作符。1.2.25 25非法的常量在一個(gè)字符常量中遇到太多的字符。1.2.26 26期望一個(gè)表達(dá)式,但是得到一個(gè)字符串1.2.27 27非法的字符(0xff)源代碼中發(fā)現(xiàn)非法的字符。消息中提供十六進(jìn)制代碼。 假定是一個(gè)空格。如果你使用奇怪的字符在標(biāo)識(shí)符名稱中,你將得到這個(gè)信息。你可以使用選項(xiàng) - ident (見(jiàn)章節(jié)5.7其它選項(xiàng).)1.2.28 28重定義一個(gè)符號(hào)(符號(hào)位置)給出的在以前(Location)聲明的冒號(hào)前的標(biāo)識(shí)符不是一個(gè)label.1.2.29 30期望一個(gè)常量期望一個(gè)常量,但是沒(méi)有得到。可能是在case 關(guān)鍵字后, 數(shù)組維數(shù)、bit field 長(zhǎng)度、 枚舉指、#if 表
9、達(dá)式等等.1.2.30 31重新定義一個(gè)符號(hào)(Symbol' conflicts with Location)數(shù)據(jù)對(duì)象或函數(shù)在此模塊中以前定義過(guò)又被定義。1.2.31 32 Field 大小 (member 'Symbol') 不能是0給出的field 的長(zhǎng)度是非正(0或負(fù)數(shù)).1.2.32 33 非法常量當(dāng)一個(gè)8進(jìn)制的常量包含數(shù)字8或9時(shí),這是一個(gè)錯(cuò)誤的形式。1.2.33 34 非常量初始化-在一個(gè)static數(shù)據(jù)項(xiàng)中發(fā)現(xiàn)非常量初始化.1.2.34 35 初始化有副作用在一個(gè)static數(shù)據(jù)項(xiàng)中發(fā)現(xiàn)有副作用的初始化.1.2.35 36 重新定義存儲(chǔ)類(lèi)的符號(hào) '
10、Symbol' 和位置Location沖突對(duì)象的存儲(chǔ)類(lèi)被改變.1.2.36 37 枚舉值'Symbol' 不一致(和位置Location沖突)枚舉值不一致.1.2.37 38符號(hào) 'Symbol' 的偏移量不一致(Location) 很多類(lèi)或結(jié)構(gòu)比早期的聲明出現(xiàn)在不同的位置(從結(jié)構(gòu)開(kāi)始的偏移量).可能因?yàn)閿?shù)組維數(shù)從一個(gè)模塊到另一個(gè)模塊的改變.1.2.38 39 重新定義符號(hào) 'Symbol' c和位置 Location 沖突struct 或 union 被重新定義.1.2.39 40 沒(méi)有聲明標(biāo)識(shí)符'Name'在表達(dá)式內(nèi),
11、 一個(gè)標(biāo)識(shí)符在以前沒(méi)有被聲明并且沒(méi)有緊跟一個(gè)左括號(hào). Name 是標(biāo)識(shí)符的名稱.1.2.40 41 重新定義符號(hào)'Symbol'一個(gè)宏或函數(shù)的參數(shù)被重新定義.1.2.41 42期望一個(gè)語(yǔ)句 1.2.42 43變量 'Symbol'虛的類(lèi)型在一個(gè)實(shí)例的上下文中發(fā)現(xiàn)虛類(lèi)型例如void類(lèi)型.1.2.43 44需要一個(gè)switch 在一個(gè)switch外出現(xiàn)case或default語(yǔ)句.1.2.44 45錯(cuò)誤的使用register 一個(gè)變量被聲明為register ,但是它的類(lèi)型不應(yīng)該是register (例如一個(gè)函數(shù)).1.2.45 46域類(lèi)型應(yīng)該是int在結(jié)構(gòu)中位域應(yīng)
12、該是類(lèi)型為unsigned 或 int. 如果你的編譯器允許其它類(lèi)型,例如char, 那么抑制這條信息.1.2.46 47錯(cuò)誤的類(lèi)型一元減需要一個(gè)算術(shù)操作數(shù).1.2.47 48錯(cuò)誤的類(lèi)型 一元的 * 或左手邊的指針 (->) 操作符需要一個(gè)指針操作數(shù)o.1.2.48 49期望一個(gè)類(lèi)型 在原型內(nèi)只有類(lèi)型被允許。原型是圓括號(hào)內(nèi)有一系列的類(lèi)型的函數(shù)聲明. 處理器是在它檢測(cè)到至少圓括號(hào)內(nèi)的一個(gè)類(lèi)型時(shí),期望更多的類(lèi)型或關(guān)閉的右圓括號(hào).1.2.49 50試圖取非左值的地址一元 & 操作符需要一個(gè)左值(對(duì)分配操作符左手邊合適的值).1.2.50 51期望整型 一元 期望一個(gè)整型(signed
13、或unsigned char、short、int、或long).1.2.51 52期望一個(gè)左值自動(dòng)遞減(-) 和自動(dòng)遞增(+) 操作符需要一個(gè)左值(對(duì)分配操作符左手邊合適的值)。記住括號(hào)不產(chǎn)生左值。因此+(char *)p;按照ANSI標(biāo)準(zhǔn)是非法的。一些編譯器允許這個(gè)結(jié)構(gòu),允許你使用+fpc 選項(xiàng)(指針括號(hào)是左值). (見(jiàn)章節(jié)5.5Flag選項(xiàng).)1.2.52 53期望一個(gè)標(biāo)量自動(dòng)遞減(-) 和自動(dòng)遞增(+) 操作符可能只應(yīng)用于標(biāo)量(算術(shù)和指針)或這些操作符定義的對(duì)象.1.2.53 54被0除常量0 w被用于除操作符 (/) 或取余操作符的右手邊。1.2.54 55壞類(lèi)型上下文需要一個(gè)標(biāo)量、函
14、數(shù)或結(jié)構(gòu)(除非-fsa).1.2.55 56壞類(lèi)型需要標(biāo)量類(lèi)型和指針的加/減操作符可能被加到指針中。1.2.56 57壞類(lèi)型Bit 操作符( &, | 和 ) 需要require 整型參數(shù).1.2.57 58壞類(lèi)型錯(cuò)誤的參數(shù)給相關(guān)的操作符;這些通常需要兩個(gè)標(biāo)量和指針,不能和整數(shù)比較(除非常量0).1.2.58 59壞類(lèi)型移位的數(shù)量必須是整數(shù).1.2.59 60壞類(lèi)型被移位的值必須是整數(shù).1.2.60 61壞類(lèi)型上下文需要一個(gè)布爾值. 布爾值必須是算術(shù)或指針形式.1.2.61 62對(duì)操作符':'矛盾的的類(lèi)型(TypeDiff)? :的第二和第三個(gè)參數(shù)必須是一致的類(lèi)型.1.
15、2.62 63期望一個(gè)左值分配操作符期望它的第一個(gè)操作數(shù)是一個(gè)左值. 請(qǐng)注意a cast removes the lvaluedness of an expression. 參考flag +fpc 在章節(jié)5.5 Flag選項(xiàng).1.2.63 64類(lèi)型不匹配(Context) (TypeDiff)T在分配中有類(lèi)型不匹配(或隱含分配,見(jiàn)Context)。TypeDiff 確定類(lèi)型的區(qū)別. 當(dāng)分配一些種類(lèi)的指針時(shí)用選項(xiàng) -epn, -eps, -epu, -epp (章節(jié)5.2錯(cuò)誤禁止選項(xiàng)) 來(lái)抑制這個(gè)消息.1.2.64 65期望一個(gè)成員名稱在一個(gè) (.) 或 (->) 操作符后,一個(gè)成員名稱應(yīng)
16、該出現(xiàn).1.2.65 66壞類(lèi)型用一個(gè)不允許的void 類(lèi)型。如果一個(gè)void 類(lèi)型放置在一個(gè)原型內(nèi),那么它必須只能是原型內(nèi)的僅有類(lèi)型。(參考錯(cuò)誤號(hào)49.)1.2.66 67不能從Type到 Type計(jì)算 試圖非標(biāo)量到整數(shù)計(jì)算.1.2.67 68不能從Type到 Type計(jì)算試圖非標(biāo)量到浮點(diǎn)數(shù)計(jì)算.1.2.68 69不能從Type到 Type計(jì)算涉及結(jié)構(gòu)到結(jié)構(gòu)或其它對(duì)象間的不匹配的轉(zhuǎn)換.1.2.69 70不能從Type到 Type計(jì)算試圖計(jì)算一個(gè)指針到一個(gè)非尋常的類(lèi)型(非整數(shù))間的計(jì)算.1.2.70 71不能從Type到 Type計(jì)算試圖計(jì)算一個(gè)不允許轉(zhuǎn)換的類(lèi)型.1.2.71 72錯(cuò)誤的選項(xiàng)&
17、#39;String'不能解釋一個(gè)選項(xiàng),選項(xiàng)在String中給出。1.2.72 73錯(cuò)誤的左操作數(shù) T指針位于或在-> 或 . 操作符的前面。這些操作符期望一個(gè)表達(dá)式位于它們的左邊。請(qǐng)注意關(guān)閉任何在這個(gè)位置的復(fù)雜的表達(dá)式的圓括號(hào)。1.2.73 74 Register的地址 試圖應(yīng)用地址操作符(&) 到一個(gè)存儲(chǔ)類(lèi)是一個(gè)register的變量.1.2.74 75太晚改變大小(選項(xiàng) 'String') 在所有的或部分的模塊被處理后,給出大小選項(xiàng)。確保在第一個(gè)模塊被處理時(shí)或在任何模塊被處理前的命令行上對(duì)目標(biāo)的大小重新設(shè)置。1.2.75 76不能打開(kāi)文件String
18、String 是文件的名稱。這個(gè)文件不能被打開(kāi)而輸出。這個(gè)文件正在被處理為PC-lint/FlexeLint 的目標(biāo)模塊。1.2.76 77位域的地址不能取C語(yǔ)言的規(guī)則僅僅允許f取整個(gè)字節(jié)的地址。1.2.77 78typedef的符號(hào)'Symbol'在Location 使用表達(dá)式符號(hào)被定義在一個(gè)typedef語(yǔ)句, 因此被認(rèn)為是一個(gè)類(lèi)型。后來(lái)發(fā)現(xiàn)在上下文中期望一個(gè)表達(dá)式。1.2.78 79對(duì) % 操作符錯(cuò)誤的類(lèi)型 % 操作符應(yīng)該和整型格式一起使用。1.2.79 80 使用省略號(hào)不是嚴(yán)格的ANSI標(biāo)準(zhǔn)省略號(hào)被用于原型,僅僅在一系列的原型后沒(méi)有跟在一系列的標(biāo)識(shí)符后。一些編譯器支持這
19、個(gè)擴(kuò)展。如果你希望是用這個(gè)特性,抑制這個(gè)信息。1.2.80 81 結(jié)構(gòu)/聯(lián)合不允許在等式比較中 兩個(gè)struct 或union被用于比較操作,如 = 或 != 。這在ANSI 標(biāo)準(zhǔn)中是不允許的,如果你的編譯器支持這個(gè),抑制這個(gè)信息。1.2.81 82 返回 <exp> 非法的void 函數(shù)ANSI 標(biāo)準(zhǔn)不允許一個(gè)返回 void 函數(shù)的格式的表達(dá)式。如果你試圖轉(zhuǎn)換void為 return (void)f(); ,而且你的編譯器允許,可以抑制這個(gè)信息。1.2.82 83 在減操作中不兼容的指針類(lèi)型 兩個(gè)指針相減,指向的類(lèi)型是不同的。你將使PC-lint/FlexeLint 去忽略指針中
20、輕微的區(qū)別,通過(guò)使用一個(gè)或多個(gè)-ep. 選項(xiàng)。描述在章節(jié)5.2 錯(cuò)誤抑制選項(xiàng).1.2.83 84sizeof 目標(biāo)是零或目標(biāo)沒(méi)有定義 一個(gè) sizeof 返回一個(gè)0 值。如果目標(biāo)沒(méi)有定義或沒(méi)有完整定義,這將會(huì)發(fā)生。確保當(dāng)你使用sizeof時(shí),對(duì)目標(biāo)是在范圍內(nèi)完整定義。1.2.84 85 數(shù)組 'Symbol' 有 0維 一個(gè)數(shù)組被聲明在上下文中沒(méi)有一個(gè)維數(shù),需要一個(gè)非零的維數(shù)。1.2.85 86 結(jié)構(gòu) 'Symbol' 沒(méi)有數(shù)據(jù)元素盡管在C中合法,但是在C中卻是非法的。1.2.86 87對(duì) #ifdef 或#ifndef 表達(dá)式太復(fù)雜在C的規(guī)則中,應(yīng)該有一個(gè)單獨(dú)
21、的標(biāo)識(shí)符緊跟 #ifdef 或 #ifndef。你可以提供一個(gè)有效的結(jié)構(gòu)化的C (或 C+) 注釋。1.2.87 88 符號(hào) 'Symbol' 是一個(gè)有空元素的數(shù)組 一個(gè)數(shù)組被聲明(在一個(gè)C模塊中)為它的元素每個(gè)都是0長(zhǎng)度,盡管在C中是合法的名單在世C中是不允許的。1.2.88 90 選項(xiàng) 'String' 僅僅合適在一個(gè)lint 注釋中指示的選項(xiàng)不合適在一個(gè)命令行或一個(gè).lnt 文件中。例如:如果 -unreachable 被給出在命令行,你將得到這個(gè)信息。1.2.89 91 行超過(guò)整型字符 (使用 +linebuf) 從輸入文件中讀取的一行比預(yù)期的要長(zhǎng)。默認(rèn)
22、的行緩沖的大小是 600 個(gè)字符。每次你使用 +linebuf 選項(xiàng),你將翻番這個(gè)大小。1.2.90 92 負(fù)數(shù)數(shù)組維數(shù)或位域長(zhǎng)度一個(gè)負(fù)數(shù)的數(shù)組維數(shù)或數(shù)組長(zhǎng)度是不被允許的。1.2.91 93在宏的字符串參數(shù)內(nèi)新行是不被允許的 在一個(gè)宏調(diào)用中包含一個(gè)被切割為不只一行的字符串。例如:A( "Hello World" );將觸發(fā)這個(gè)信息。如果一些編譯器接受這種結(jié)構(gòu),你可以抑制這個(gè)信息。但是最好把字符串常量放置于一行:A( "Hello World" );將更好。1.2.92 101 期望一個(gè)標(biāo)識(shí)符當(dāng)處理一個(gè)函數(shù)聲明時(shí),遇到一個(gè)參數(shù)說(shuō)明,不是標(biāo)識(shí)符,盡管以前的參
23、數(shù)被確定為一個(gè)標(biāo)識(shí)符。這是混合舊格式聲明和新格式聲明的函數(shù),這是不允許的。例如:void f(n,int m)將發(fā)布這個(gè)信息。1.2.93 102 非法的參數(shù)確定在一個(gè)函數(shù)聲明內(nèi),一個(gè)參數(shù)被確定為或者一個(gè)標(biāo)識(shí)符,或者一個(gè)跟著聲明的類(lèi)型。1.2.94 103 不期望的聲明 在一個(gè)原型后,僅僅只能是一個(gè)逗號(hào)、分號(hào)、右括號(hào)或左brace。如果你省略了一個(gè)在一個(gè)聲明后的終結(jié)符,或如果你混合舊格式參數(shù)聲明和新格式原型時(shí),這個(gè)錯(cuò)誤可能發(fā)生。1.2.95 104沖突的類(lèi)型 發(fā)現(xiàn)兩個(gè)連續(xù)的沖突類(lèi)型,例如 int 緊跟一個(gè)double。去除其中一個(gè)類(lèi)型。1.2.96 105 沖突的修飾符發(fā)現(xiàn)兩個(gè)連續(xù)的沖突修飾符
24、,例如 far 緊跟一個(gè)near。去除其中一個(gè)修飾符。1.2.97 106 非法常量在一個(gè)預(yù)處理器表達(dá)式中發(fā)現(xiàn)一個(gè)字符串常量,例如:#if ABC = "abc"這個(gè)表達(dá)式應(yīng)該是一個(gè)整型表達(dá)式。1.2.98 107 標(biāo)簽 'Symbol' (Location) 沒(méi)有定義在一個(gè)goto中,Symbol 在給給出的位置Location出現(xiàn),但是沒(méi)有相應(yīng)的label。1.2.99 108 無(wú)效的上下文 遇到一個(gè)continue 或 break 語(yǔ)句,沒(méi)有合適的上下文,例如: for, while, 或 do 循環(huán),多僅僅對(duì)break 語(yǔ)句,相應(yīng)的 switch 語(yǔ)
25、句。.1.2.100 110 試圖給一個(gè)void分配試圖分配一個(gè)值給一個(gè)指定的目標(biāo) (可能通過(guò)一個(gè)指針) 為 void.1.2.101 111 分配給一個(gè)const目標(biāo)一個(gè)目標(biāo)被聲明為 const 被分配給一個(gè)值。例如, 如果 p 是一個(gè)指針,指向一個(gè) const int ,那么分配到 *p 將導(dǎo)致這個(gè)錯(cuò)誤。1.2.102 113 不一致的枚舉聲明 在一個(gè)枚舉內(nèi)的系列成員(或它們的值)和另一個(gè)同名的枚舉量(通常在另一個(gè)模塊)不一致。1.2.103 114對(duì)tag 'Symbol'不一致的結(jié)構(gòu)聲明 在一個(gè)結(jié)構(gòu)(或聯(lián)合)內(nèi)的系列成員(或它們的值)和另一個(gè)同名的枚舉量(通常在另一個(gè)模
26、塊)不一致。 1.2.104 115 結(jié)構(gòu)/聯(lián)合沒(méi)有定義 結(jié)構(gòu)或聯(lián)合的引用需要一個(gè)定義,但是在范圍內(nèi)沒(méi)有定義。例如,一個(gè) p->a 的引用,這里 p 是一個(gè)指針,指向一個(gè)結(jié)構(gòu),但是此結(jié)構(gòu)還沒(méi)有在當(dāng)前模塊中被定義。1.2.105 116 不合適的存儲(chǔ)類(lèi) 一個(gè)不同于register的存儲(chǔ)類(lèi)在一個(gè)代碼段中被給出,專注于聲明參數(shù)。1.2.106 117不合適的存儲(chǔ)類(lèi)一個(gè)存儲(chǔ)類(lèi)在函數(shù)外被給出,表示 auto 或 register。這個(gè)存儲(chǔ)類(lèi)僅僅適合于函數(shù)內(nèi)。1.2.107 118原型參數(shù)太少一個(gè)函數(shù)提供的參數(shù)少于范圍內(nèi)原型指示的個(gè)數(shù)。1.2.108 119原型參數(shù)太多一個(gè)函數(shù)提供的參數(shù)多于范圍內(nèi)原
27、型指示的個(gè)數(shù)。1.2.109 122數(shù)字(字符)對(duì)基數(shù)太大指示的字符在一個(gè)常量中被發(fā)現(xiàn),并以零開(kāi)始。例如, 08 在一些編譯器中被認(rèn)為是 8 ,但是它應(yīng)該是 010 或 8。1.2.110 123有參數(shù)在Location 定義的宏 'Symbol' ,這只是一個(gè)告警 有參數(shù)的宏被隨后識(shí)別,沒(méi)有一個(gè)其次的 '('。這是合法的,但是可能是個(gè)疏忽。要抑制這個(gè)信息是難得的 (使用 -e123),因?yàn)橐恍┚幾g器允許,例如,宏 max() 和變量 max共存。(見(jiàn)章節(jié)錯(cuò)誤123使用min或max.).1.2.111 124指針指向void是不允許的 這包括減、加和關(guān)系操作符
28、 (> >= < <=).1.2.112 125太多的存儲(chǔ)類(lèi)確定符發(fā)現(xiàn)多于一個(gè)的存儲(chǔ)類(lèi)確定符(static、extern, typedef, register 或 auto),只允許一個(gè)。1.2.113 126不一致的結(jié)構(gòu)定義 'Symbol'模塊間的結(jié)構(gòu)(或 union 或 enum)定義不一致。當(dāng)處理一個(gè)lob時(shí),發(fā)現(xiàn)不一致。行號(hào)信息在這個(gè)信息中不存在。改變這個(gè)結(jié)構(gòu)以便成員信息保持一致。1.2.114 127非法常量 一個(gè)空字符常量 ('') 被發(fā)現(xiàn)。1.2.115 128 指針指向函數(shù)不允許 指向函數(shù)的指針在一個(gè)算術(shù)上下文中被發(fā)現(xiàn),
29、例減、加或關(guān)系操作符(> >= < <=)。1.2.116 129 期望聲明,標(biāo)識(shí)符 'Symbol'被忽略 在一個(gè)上下文中期望一個(gè)聲明,但是發(fā)現(xiàn)一個(gè)標(biāo)識(shí)符,甚至,標(biāo)識(shí)符不能跟著一個(gè)'(' 或一個(gè)''1.2.117 130期望一個(gè)整型類(lèi)型在一個(gè)switch 語(yǔ)句中的表達(dá)式, 必須是int 的一些變種(可能是 long 或 unsigned) 或一個(gè) enum。1.2.118 131在位置Location 調(diào)用宏'Symbol' 時(shí)語(yǔ)法錯(cuò)誤 當(dāng)一個(gè)宏的參數(shù)(象函數(shù)的宏) 被調(diào)用,而且提供的是不正確的參數(shù)個(gè)數(shù),
30、這時(shí)這個(gè)信息被發(fā)布。 Location 是宏調(diào)用的開(kāi)始的位置。這個(gè)可能很有用,因?yàn)殄e(cuò)誤的宏調(diào)用能延續(xù)到很多行。1.2.119 132 期望函數(shù)定義 在圓括號(hào)間的標(biāo)識(shí)符的函數(shù)聲明是一個(gè)舊形式函數(shù)定義的開(kāi)始(K&R 形式)。這通常緊跟可選的聲明和左大括號(hào)信號(hào)函數(shù)體的開(kāi)始?;蛘哂妙?lèi)型代替標(biāo)識(shí)符,或者用函數(shù)體完成函數(shù)。1.2.120 133 對(duì)集合體太多的初始化器在一個(gè)關(guān)閉括號(hào)的初始化器內(nèi),比集合體的元素有更多的項(xiàng)。1.2.121 134 丟失初始化器 期望一個(gè)初始化器,但是僅僅存在一個(gè)逗號(hào)。1.2.122 135 假定在初始化器中是逗號(hào) 在兩個(gè)初始化器間丟失一個(gè)逗號(hào),例如:int a22 =
31、 1, 2 3, 4 ;在第一個(gè)由大括號(hào)后丟失一個(gè)逗號(hào)。1.2.123 136 非法的宏名稱 ANSI 標(biāo)準(zhǔn)限制使用特定名稱的宏。定義在限制列表中。1.2.124 137 在switch內(nèi)常量Symbol'被使用了兩次 在一個(gè)switch 語(yǔ)句內(nèi),指示的常量被作為一個(gè)case使用了兩次。目前只有記數(shù)類(lèi)型被檢查重復(fù)發(fā)生。1.2.125 138 不能增加雙親 'Symbol' 到強(qiáng)類(lèi)型 String;創(chuàng)建循環(huán) 試圖增加一個(gè)強(qiáng)類(lèi)型雙親到一個(gè)typedef 類(lèi)型。這個(gè)試圖或者是明顯的(使用選項(xiàng)-strong)或者是隱含的 使用一個(gè) typedef 到一個(gè)已知的強(qiáng)類(lèi)型。這個(gè)試圖將
32、導(dǎo)致在一個(gè)強(qiáng)雙親關(guān)系中的循環(huán)。這個(gè)循環(huán)是簡(jiǎn)單地不可忍受的。1.2.126 139不能對(duì)函數(shù)進(jìn)行sizeof 計(jì)算 試圖對(duì)函數(shù)進(jìn)行sizeof 計(jì)算。1.2.127 140 類(lèi)型出現(xiàn)在一個(gè)修飾符后微軟的修飾符,例如far、_near、_huge、_pascal等等修改聲明符它直接的權(quán)限。因此不應(yīng)該出現(xiàn)在類(lèi)型前。例如,你應(yīng)該寫(xiě) int pascal f(void); 而不是 pascal int f(void);。注意:const、volatile 和微軟的修飾符不同。它們可以出現(xiàn)在類(lèi)型的前面或后面。在報(bào)告錯(cuò)誤后,試圖處理修飾符作為程序員可能有意的。參見(jiàn)+fem 標(biāo)志在章節(jié)5.5標(biāo)志選項(xiàng).1.2.
33、128 141下列選項(xiàng)有太多的元素:'String'指示的選項(xiàng) (以'String'給出)太大??赡芙M成的項(xiàng)目列表有太大的項(xiàng)目。你應(yīng)該分解大的選項(xiàng)為兩個(gè)或多個(gè)更小的選項(xiàng),總和和一個(gè)大選項(xiàng)是相等的。1.2.129 144對(duì)符號(hào)'Symbol',不存返回值,和Location 比較試圖對(duì)函數(shù)Symbol 使用不存在的返回值。函數(shù)在以前被聲明為void。1.2.130 145 在操作符前期望一個(gè)類(lèi)型,假定是void 在一個(gè)上下文中期望一個(gè)類(lèi)型,但是沒(méi)有發(fā)現(xiàn)類(lèi)型,寧愿遇到一個(gè)操作符 '*' 或 '&' 。關(guān)鍵字 v
34、oid w被假定有這個(gè)操作符的優(yōu)先級(jí)。1.2.131 146 假定一個(gè)二進(jìn)制常量 一個(gè)格式為 0b. 的常量被遇到。這被認(rèn)為是一個(gè)二進(jìn)制常量。例如, 0b100 代表值 4。如果你的編譯器支持二進(jìn)制常量,你可以抑制這個(gè)信息。1.2.132 147 sizeof 只是獲得一個(gè)參數(shù) 格式為sizeof(a,b) 的表達(dá)式被檢測(cè)到。第二個(gè)參數(shù)是非標(biāo)準(zhǔn)的,如果你的編譯器使用第二個(gè)參數(shù),可以抑制這個(gè)信息。1.2.133 148 成員 'Symbol' 在Location以前聲明過(guò)指示的成員在同樣的結(jié)構(gòu)或聯(lián)合中以前聲明過(guò)。盡管函數(shù)的重新聲明可能看起來(lái)是良性的,但是這是在語(yǔ)言的規(guī)則中不允許的
35、,其中一個(gè)聲明應(yīng)該被去除。1.2.134 149 C+ 構(gòu)造'String' 在代碼中發(fā)現(xiàn)一個(gè)非法的結(jié)構(gòu)被在C代碼中發(fā)現(xiàn)。它看起來(lái)象適合于C+。1.2.135 150 記號(hào)'String' 不期望 String遇到一個(gè)不期望的記號(hào)。發(fā)生后,被標(biāo)識(shí)為第二個(gè)信息的參數(shù)。1.2.136 151記號(hào) 'Name' 和抽象類(lèi)型不一致在一個(gè)上下文中,抽象類(lèi)型被允許在一個(gè)轉(zhuǎn)換內(nèi)或一個(gè)sizeof 后,在開(kāi)始分析抽象類(lèi)型后,發(fā)現(xiàn)一個(gè)標(biāo)識(shí)符。例如:x = (int y) z;1.2.137 152 丟失Lob 基礎(chǔ)文件 'file name' 指示
36、的文件被確定為一個(gè)lob 的基礎(chǔ)文件,通過(guò)選項(xiàng) -lobbase()產(chǎn)生。在輸出中,如果這個(gè)lob基礎(chǔ)文件丟失,給出這個(gè)信息。情形是可糾正的,通過(guò)簡(jiǎn)單的產(chǎn)生丟失的 lob 輸出。在makefile中給出合適的從屬這可能是一個(gè)問(wèn)題 。在輸出中,最可能導(dǎo)致這個(gè)信息的是基礎(chǔ)文件是過(guò)時(shí)的。一個(gè)lob文件中的無(wú)用代碼信息被讀取,不匹配一個(gè)早嵌入在基礎(chǔ)文件中的相似的代碼。輸入 lob 文件一個(gè)被認(rèn)為錯(cuò)誤,應(yīng)該被重新產(chǎn)生。見(jiàn)章節(jié)7.lint目標(biāo)模塊1.2.138 153 不能創(chuàng)建臨時(shí)文件 當(dāng)基于一個(gè)lob基礎(chǔ)文件產(chǎn)生一個(gè)lob 輸出文件時(shí)產(chǎn)生這個(gè)信息,它被首先寫(xiě)入一個(gè)臨時(shí)文件,這個(gè)臨時(shí)文件通過(guò)C庫(kù)函數(shù) tm
37、pnam()產(chǎn)生。1.2.139 154 不能估計(jì)類(lèi)型'String', 假定為int 信息中的String 是第二個(gè)參數(shù),或者是一個(gè)printf_code 選項(xiàng),或者是一個(gè)scanf_code 選項(xiàng)。當(dāng)使用了,它被認(rèn)為是一個(gè)類(lèi)型,不幸的是,這個(gè)類(lèi)型不能被標(biāo)識(shí)。1.2.140 155 在一個(gè)表達(dá)式內(nèi)忽略 系列,假定為0 在一個(gè)表達(dá)式內(nèi)的braced 系列是某些編譯器(特別是GCC)的非標(biāo)準(zhǔn)的擴(kuò)展。在內(nèi),我們對(duì)待這個(gè)braced 系列為等于零的常量。如果你僅僅抑制這個(gè)信息,這意味著我們可以lint 這個(gè)結(jié)構(gòu)。1.3 內(nèi)部錯(cuò)誤編號(hào)為200-299的一些矛盾被FlexeLint/PC
38、-lint 發(fā)現(xiàn)。這些可能不是用戶的錯(cuò)誤,可能是Gimpel Software的問(wèn)題。1.4 致命錯(cuò)誤這些錯(cuò)誤是通常致命的,限制這些錯(cuò)誤被檢查出來(lái)是不可能的。但是,這些標(biāo)記有*的錯(cuò)誤可以被限制顯示,例如: -e3061.4.1 301堆棧溢出當(dāng)處理聲明時(shí),有一個(gè)堆棧溢出。發(fā)現(xiàn)大約50 個(gè)嵌套的聲明。例如,如果一個(gè) ' /' 緊跟 50 個(gè)連續(xù)的'*' 被引入一個(gè)盒子似的注釋,而且如果 '/' 被省略 ,將產(chǎn)生這個(gè)信息。1.4.2 302 超過(guò)可用的內(nèi)存 主內(nèi)存被耗盡。1.4.3 303 字符串太長(zhǎng) (嘗試 +macros) 一個(gè)單獨(dú)的 #defi
39、ne 定義或宏調(diào)用超過(guò)一個(gè)內(nèi)部的限制 (超過(guò) 409字符)。診斷指出的問(wèn)題可以被使用一個(gè)選項(xiàng)校正。1.4.4 304被破壞的目標(biāo)文件,代碼Integer, 符號(hào)=String一個(gè)PC-lint/FlexeLint 目標(biāo)文件是明顯的被破壞的。請(qǐng)刪除這個(gè)目標(biāo)模塊,并重新創(chuàng)建它,使用選項(xiàng) -oo .見(jiàn)章節(jié)7.3 產(chǎn)生一個(gè)LOB. 特殊的代碼標(biāo)識(shí)符號(hào)和符號(hào)名列表是可選的信息后綴作為幫助技術(shù)支持診斷問(wèn)題。1.4.5 305 不能打開(kāi)模塊 'file name' file name 是文件名稱。這個(gè)名稱的模塊不能為讀被打開(kāi)??赡苣闫磳?xiě)錯(cuò)誤名稱。1.4.6 306* 以前遇到的模塊 '
40、;FileName' FileName 是模塊的名稱。這個(gè)名稱的模塊以前遇到過(guò)。這可能是用戶的一個(gè)失誤。1.4.7 307 不能打開(kāi)間接文件 'FileName'FileName 是間接文件的名稱。這個(gè)名稱的間接文件(結(jié)尾是 .lnt) 不能為讀被打開(kāi)。1.4.8 308 不能寫(xiě)到標(biāo)準(zhǔn)輸出 stdout 被發(fā)現(xiàn)等于NULL。 這是最不尋常的。1.4.9 309* #error . #error 指示被遇到。省略號(hào)反映最初的行。通常地處理在這點(diǎn)中斷。如果你設(shè)置 fce (連續(xù)#error) 標(biāo)志。處理將繼續(xù)。1.4.10 310聲明太長(zhǎng):'String.'
41、發(fā)現(xiàn)一個(gè)單獨(dú)的聲明對(duì)于內(nèi)部的緩沖太長(zhǎng)(差不多2000 個(gè)字符)。當(dāng)試圖使用選項(xiàng)-o. 寫(xiě)出到聲明時(shí)發(fā)生。聲明的最初的30 個(gè)字符給出在String。代表性地,這通過(guò)一個(gè)非常長(zhǎng)的結(jié)構(gòu),子結(jié)構(gòu)是沒(méi)有標(biāo)簽的導(dǎo)致的。首先標(biāo)識(shí)導(dǎo)致困難的聲明。如果一個(gè) struct 或 union, 分配給一個(gè)沒(méi)有名稱的子結(jié)構(gòu)或子聯(lián)合。一個(gè)typedef 能被用于減少這個(gè)聲明的大小。1.4.11 312 lob是荒廢的或外來(lái)的版本號(hào) 一個(gè)lob被PC-lint/FlexeLint以前的或不同的版本產(chǎn)生。刪除這個(gè) .lob 文件,使用你的新版本的PC-lint/FlexeLint重新創(chuàng)建它。1.4.12 313 太多文件P
42、C-lint/FlexeLint能處理的文件的數(shù)量超過(guò)內(nèi)部的限制。FlexeLint 用戶可以重新編譯它的系統(tǒng)以增加這個(gè)限制。在 custom.h內(nèi)尋找符號(hào) FSETLEN。 目前,文件的數(shù)量限制到6400。1.4.13 314* 以前使用的 .lnt 文件:FileName 指定名稱的間接文件以前遇到過(guò)。如果這不是一次事故,你可以抑制這個(gè)信息。1.4.14 315 超過(guò)信息限制 (見(jiàn) -limit)超過(guò)信息的最大量。通常沒(méi)有限制除非強(qiáng)加限制使用選項(xiàng) -limit(n) (見(jiàn)章節(jié)5.7 其它 選項(xiàng).)1.4.15 316 寫(xiě)文件"file name" 時(shí)錯(cuò)誤給定的文件不能輸
43、出打開(kāi)。1.4.16 321 聲明堆棧溢出當(dāng)處理一個(gè)聲明時(shí)在堆棧使用于特定的數(shù)組、指針、函數(shù)或引用修飾符時(shí)發(fā)生堆棧溢出。1.4.17 322* 不能打開(kāi)包含文件 FileName FileName 是不能被打開(kāi)的包含文件的名稱。目錄尋找通過(guò)選項(xiàng):i (見(jiàn)章節(jié) 5.7其它選項(xiàng).)+fdi (章節(jié)5.5標(biāo)志選項(xiàng)) 和 INCLUDE 環(huán)境變量控制。這是一個(gè)可以禁止的致命信息。如果使用選項(xiàng)-e322 ,錯(cuò)誤信息 7 將踢掉砸開(kāi)。一個(gè)診斷將被發(fā)布,但是處理將繼續(xù)。1.4.18 323記號(hào)String 太長(zhǎng) 試圖為以后的重用存儲(chǔ)一個(gè)記號(hào),超過(guò)一個(gè)固定的大小緩沖。(通過(guò)大小M_TOKEN 來(lái)控制)。1.4
44、.19 324太多的符號(hào)Integer遇到太多的符號(hào)。打斷內(nèi)部的限制。1.4.20 325不能重新打開(kāi)文件 'file name' 在大量的嵌套的include的情況下,在外部邊緣的文件需要在一個(gè)新的被打開(kāi)前被關(guān)閉。這些外部文件然后需要被重新打開(kāi)。當(dāng)試圖重新打開(kāi)這樣的一個(gè)文件時(shí),發(fā)生一個(gè)錯(cuò)誤。1.5 C告警信息1.5.1 401標(biāo)示符“Symbol”之前并沒(méi)有被聲明為靜態(tài)存儲(chǔ)類(lèi)型此符號(hào)之前不是以靜態(tài)存儲(chǔ)類(lèi)型的形式聲明,此種形式從技術(shù)上違背了ANSI標(biāo)準(zhǔn),某些編譯器會(huì)默認(rèn)此種形式,認(rèn)為此符號(hào)是靜態(tài)。1.5.2 402靜態(tài)函數(shù)“Symbol” (Location)沒(méi)有被定義在當(dāng)前模
45、塊中被引用的此靜態(tài)函數(shù)沒(méi)有被定義,僅僅進(jìn)行了聲明。1.5.3 403靜態(tài)符號(hào)“Symbol”被異常類(lèi)型的修改者修改某些類(lèi)型修改者,如,修改者類(lèi)型為_(kāi)export,與靜態(tài)存儲(chǔ)類(lèi)型不一致。1.5.4 404在文件 'FileName' 中結(jié)構(gòu)沒(méi)有定義完成結(jié)構(gòu),聯(lián)合體,枚舉類(lèi)型需要在同一個(gè)頭文件中被定義完成。不要跨文件定義和聲明結(jié)構(gòu),聯(lián)合體,枚舉類(lèi)型。1.5.5 405if之類(lèi)的宏開(kāi)關(guān)沒(méi)有在同一個(gè)頭文件'FileName'被關(guān)閉錯(cuò)誤如:文件a#if _LOGIC_BOARD = _LOGIC_CHMHDR_CPUF .文件b#elif _LOGIC_BOARD = _
46、LOGIC_CHMHDR_CPUR .#endif1.5.6 406注釋沒(méi)有在同一個(gè)頭文件'FileName'被關(guān)閉。 注釋沒(méi)有在同一個(gè)頭文件被關(guān)閉。錯(cuò)誤如:文件a/* *文件結(jié)束1.5.7 407不一致地使用tag 'Symbol' ,在 Location 沖突同一個(gè)標(biāo)示符,在不同的位置被定義認(rèn)為不同的類(lèi)型,如聯(lián)合體,結(jié)構(gòu)體,枚舉類(lèi)型。例如:struct tag *p;union tag *q;1.5.8 408switch表達(dá)式中,類(lèi)型不匹配表達(dá)式中的case和switch語(yǔ)句類(lèi)型沒(méi)有達(dá)成同一 如:typedef enum HRPDDEFS_ALPHA =
47、0, HRPDDEFS_BETA, HRPDDEFS_GAMMA, HRPDDEFS_NUMBER_OF_SECTORS HRPDDEFS_SectorType;HRPDDEFS_SectorType m_tSector;switch (m_tSector) case 1: . break; case 4: . break;default:. return FALSE; 1.5.9 409期望是一個(gè)指針或者數(shù)組此種類(lèi)型i.的表達(dá)式中,發(fā)現(xiàn)i是一個(gè)整型變量,這種情況可能是合法的,與腳本操作符有關(guān)。例如:是整型,是數(shù)組,那么ia是合法的,但屬于異常。如果這種情況是你編碼風(fēng)格,請(qǐng)屏蔽之。1.5.10
48、 410size_t 不是fzl或者fzu類(lèi)型,使用 'Type'如果你以前試圖設(shè)置過(guò)sizeof選項(xiàng)為+fzl, -fzl, or -fzu,后來(lái)size_t聲明和此種設(shè)置相沖突,此種告警有可能發(fā)生。 fzl siZeof-is-Long flag OFFfzu siZeof-is-Unsigned flag ON 這通常意味著你試圖使用你自己系統(tǒng)的頭文件對(duì)其它系統(tǒng)lint程序。如果是這樣,我們建議你創(chuàng)建一個(gè)目錄放置其它系統(tǒng)的頭文件,在那個(gè)目錄里置換size_t ,使用那個(gè)目錄lint程序。1.5.11 411ptrdiff_t不是fdl期望的選項(xiàng), 使用 'Type
49、' 此種告警可能發(fā)生,如果你以前試圖設(shè)置過(guò)指針的差異類(lèi)型,但后來(lái)ptrdiff_t的聲明與以前設(shè)置相沖突。參考錯(cuò)誤信息410。1.5.12 412模糊的格式表達(dá)式'%X'在scanf系列中,%X含義不清晰,在Microsoft C中,它代表%lx,在ANSI C,它代表 %x。此種模糊表達(dá)式不應(yīng)該在等級(jí)程度高的代碼中出現(xiàn)。1.5.13 413在操作符號(hào)“String”引用中,左參數(shù)或者右參數(shù)里,可能使用NULL指針一個(gè)null 指針(一個(gè)可能值是0的指針) 被不合適的使用。參考信息613和794,和章節(jié)9.2數(shù)值跟蹤1.5.14 414可能被除除函數(shù)(/)或取模函數(shù)(%
50、)的第二個(gè)參數(shù)可能是0。見(jiàn)章節(jié)9.2數(shù)值跟蹤1.5.15 415操作符'String'試圖超出指針的范圍 一個(gè)超出范圍的指針。String 指定操作符. 參數(shù)'Integer' 給出指針能達(dá)到的界限。它通過(guò)單元的給出的指向?qū)ο蟮闹羔槾笮?lái)度量。這個(gè)值和最后的好數(shù)據(jù)相關(guān),因此應(yīng)該始終大于零。 例如:int a10;a10 = 0;溢出信息的結(jié)果包含短語(yǔ)'1 beyond end of data'. 見(jiàn)章節(jié)9.2數(shù)值跟蹤1.5.16 416 操作符'String'創(chuàng)建出越界的指針 ('Integer' beyond e
51、nd of data) 創(chuàng)建出一個(gè)越界的指針。參考信息415。例如:int a10;.f( a + 11 );這里,創(chuàng)建出一個(gè)違法的指針值。注意:指針a+10 不被PC-lint/FlexeLint 認(rèn)為是一個(gè)越界的指針。因?yàn)锳NSI C 明確地允許指針可以超越數(shù)組。訪問(wèn)a+10、或者形式 *(a+10)、或者更熟悉的a10, w將被認(rèn)為是錯(cuò)誤的,但是如果是那樣的話,信息415 would be issued. 見(jiàn)章節(jié)9.2數(shù)值跟蹤.1.5.17 417整型常量'String'比long long int還要大最長(zhǎng)可能的整型缺省是8個(gè)字節(jié)。 例如:0xFFFF0000FFFF0
52、000F1.5.18 418傳遞NULL指針給引用的函數(shù)傳遞NULL指針給引用的函數(shù)Symbol.。正被討論的參數(shù)在上下文中被給出。函數(shù)或者是一個(gè)庫(kù)函數(shù)或者是一個(gè)用戶函數(shù)被設(shè)計(jì)為不接受一個(gè)NULL指針,通過(guò)選項(xiàng) -function. 見(jiàn)章節(jié)10.1 函數(shù)模仿和章節(jié)10.2.1 可能的模仿.1.5.19 419 顯然函數(shù)'Symbol'的數(shù)據(jù)越界, 參數(shù) Integer 超過(guò)參數(shù)Integer這個(gè)消息針對(duì)數(shù)據(jù)轉(zhuǎn)換函數(shù)例如memcpy、strcpy、fgets等等。當(dāng)?shù)谝粋€(gè)參數(shù)引用的大小超過(guò)第二個(gè)的緩沖區(qū)的大小時(shí)發(fā)生告警。這個(gè)消息可以被用于用戶函數(shù),用-function 選項(xiàng)。見(jiàn)章
53、節(jié)10.1 函數(shù)模仿和章節(jié)10.2.1 可能的模仿.1.5.20 420對(duì)此函數(shù)'Symbol'進(jìn)行數(shù)組操作數(shù)據(jù)寫(xiě)溢出,參數(shù)Integer 超過(guò)參數(shù)Integer 引用這個(gè)信息是對(duì)幾個(gè)庫(kù)函數(shù)(例如fwrite、memcmp等等)發(fā)布的,在其中有一些明顯地試圖訪問(wèn)比現(xiàn)存的更多數(shù)據(jù)。例如:如果在fwrite 調(diào)用中確定的數(shù)據(jù)長(zhǎng)度超過(guò)確定的數(shù)據(jù)的大小。函數(shù)通過(guò)Symbol 確定,參數(shù)通過(guò)參數(shù)號(hào)標(biāo)識(shí)。見(jiàn)章節(jié)10.1 函數(shù)模仿和章節(jié)10.2.1 可能的模仿1.5.21 421注意:函數(shù)“Symbol”被認(rèn)為很危險(xiǎn) 這個(gè)信息默認(rèn)的對(duì)內(nèi)置函數(shù)gets發(fā)布。這個(gè)函數(shù)被認(rèn)為危險(xiǎn),因?yàn)闆](méi)有機(jī)制保證
54、第一個(gè)參數(shù)提供的緩沖將不會(huì)溢出。一個(gè)知名的計(jì)算機(jī)病毒(學(xué)術(shù)上叫蠕蟲(chóng)) 就是基于這個(gè)缺陷創(chuàng)建的。提供選項(xiàng) -function , 用戶可以指出其它函數(shù)是危險(xiǎn)的。1.5.22 422傳遞負(fù)數(shù)參數(shù)給函數(shù)參數(shù)為正數(shù)的函數(shù)這個(gè)信息包含函數(shù)名稱 (Symbol), 可疑的值(Integer) 和參數(shù)號(hào) (Context)。這個(gè)函數(shù)可能是一個(gè)標(biāo)準(zhǔn)庫(kù)函數(shù)設(shè)計(jì)為僅僅接受正值,例如 malloc 或 memcpy (第三個(gè)參數(shù)), 或者是通過(guò)用戶使用-function 或 -sem 選項(xiàng)標(biāo)識(shí)的函數(shù)。負(fù)值可能事實(shí)上是 unsigned。因此:void *malloc( unsigned );void f()int
55、n = -1;int *p;p = malloc(n); / Warning 422p = malloc( (unsigned) n ); / Warning 422注意轉(zhuǎn)換表達(dá)式并不能抑制告警。在執(zhí)行上有一個(gè)輕微的區(qū)別在32位系統(tǒng)和16位系統(tǒng)。如果 long 和 int的大小相同 (在32位系統(tǒng)中) ,告警基于符號(hào)位發(fā)布。如果 long 比 int (在16位系統(tǒng)中) 大,在上面的例子中如果這個(gè)值被轉(zhuǎn)換為負(fù)值發(fā)布這個(gè)告警。如果一個(gè) unsigned int 有high-order 位設(shè)置,將不會(huì)發(fā)布告警,因?yàn)椴皇遣缓侠淼囊?malloc 多于 32,176 字節(jié)在一個(gè)16位系統(tǒng)中。1.5.2
56、3 423在變量' Symbol'賦值時(shí)出現(xiàn)內(nèi)存泄漏 分配給一個(gè)指針變量,這個(gè)指針變量保留有一個(gè)分配的目標(biāo)的地址,還沒(méi)有釋放。分配的內(nèi)存沒(méi)有釋放,被認(rèn)為是一個(gè)內(nèi)存泄漏。1.5.24 424不恰當(dāng)動(dòng)態(tài)內(nèi)存釋放方法 這個(gè)信息指示存儲(chǔ)單元分配(free(), delete, 或 delete) 被不適當(dāng)?shù)臄?shù)據(jù)被釋放。數(shù)據(jù)的種類(lèi)是一個(gè)或多個(gè):malloc, new, new, static, auto,member, modified 或 constant。 這些有下列描述的含義:Malloc data數(shù)據(jù)從調(diào)用函數(shù) malloc、calloc 或 realloc獲得;new 和 ne
57、wdata 從調(diào)用函數(shù) new 中導(dǎo)出的數(shù)據(jù);Static data 或者一個(gè)函數(shù)內(nèi)的或外部的 static 數(shù)據(jù);auto data 在函數(shù)呢內(nèi)的一個(gè)非靜態(tài)數(shù)據(jù);Member data 是結(jié)構(gòu)的一部分 (因此不能被獨(dú)立釋放);modified data 是應(yīng)用指針計(jì)算到其它一些指針的結(jié)果,例如:p = malloc(100);free( p+1 ); / warningp+1 被認(rèn)為是modified.constant data是轉(zhuǎn)換一個(gè)常量到一個(gè)指針的結(jié)果,例如:int *p = (int *) Ox80002;free(p); / warning1.5.25 425在處理(-sem)選項(xiàng)包含的語(yǔ)義字符串出錯(cuò)當(dāng)處理一個(gè)語(yǔ)義選項(xiàng)(-sem)時(shí),
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校教學(xué)成果表格
- 農(nóng)學(xué)作物種植技術(shù)測(cè)試題及答案解析
- 高效辦公數(shù)字化解決方案實(shí)踐指南
- 財(cái)務(wù)人員擔(dān)保協(xié)議書(shū)
- 水資源智能監(jiān)控與管理合同
- 金融科技反欺詐技術(shù)合作協(xié)議
- 基于人工智能的智能種植管理系統(tǒng)優(yōu)化實(shí)踐
- 月子中心月嫂服務(wù)合同
- 建筑裝修行業(yè)施工安全責(zé)任書(shū)
- 西方童話格林童話讀后感和兒童成長(zhǎng)影響
- 地理-浙江省強(qiáng)基聯(lián)盟2025年2月高三年級(jí)聯(lián)考試題和答案
- (必刷)湖南省醫(yī)學(xué)院校高職單招職業(yè)技能測(cè)試必會(huì)題庫(kù)(含往年真題)
- 2025《醫(yī)藥企業(yè)防范商業(yè)賄賂風(fēng)險(xiǎn)合規(guī)指引》解讀課件
- 血透病人皮膚瘙癢課件
- 2025年度船舶焊接維修工程合同范本資料下載
- 貴州茅臺(tái)課程設(shè)計(jì)
- 工業(yè)攝像頭知識(shí)培訓(xùn)課件
- 2024-2025學(xué)年六年級(jí)數(shù)學(xué)人教版上冊(cè)寒假作業(yè)(綜合基礎(chǔ)復(fù)習(xí)篇含答案)
- DB33T 1134-2017 靜鉆根植樁基礎(chǔ)技術(shù)規(guī)程
- 樓梯塑料滴水線施工方案
- 《用電檢查與稽查》課件
評(píng)論
0/150
提交評(píng)論