Turbo C 編譯出錯(cuò)信息 Turbo C 編譯程序查出的源程序錯(cuò)誤分為三類:嚴(yán)重錯(cuò)誤、一般錯(cuò)誤和警告。 1:嚴(yán)重錯(cuò)誤(fatal error):很少出現(xiàn),它通常是內(nèi)部編譯出錯(cuò)。在發(fā)生嚴(yán) 重錯(cuò)誤時(shí),編譯立即停止,必需采取一些適當(dāng)?shù)拇胧┎⒅匦戮幾g。 2:一般錯(cuò)誤(error ):指程序的語法錯(cuò)誤以及磁盤、內(nèi)存或命令行錯(cuò)誤等。 編譯程序?qū)⑼瓿涩F(xiàn)階段的編譯,然后停止。編譯程序在每個(gè)階段( 預(yù)處理、語法分 析、優(yōu)化、代碼生成 )將盡可能多地找出源程序中的錯(cuò)誤。 3:警告(warning ):不阻止編譯的繼續(xù)進(jìn)行。它指出一些值得懷疑的情況, 而這些情況本身又可以合理地作為源程序的一部分。一旦在在源文件中使用了與機(jī) 器有關(guān)的結(jié)構(gòu),編譯程序就會(huì)產(chǎn)生警告信息。 編譯程序首先輸出這三類出錯(cuò)信息,然后輸出源文件名和發(fā)現(xiàn)出錯(cuò)的行號(hào),最 后輸出信息的內(nèi)容。 下面按字母順序分別列出了這三類出錯(cuò)信息。對(duì)每一條信息,均指出了可能產(chǎn) 生的原因和糾正方法。 1:嚴(yán)重錯(cuò)誤 Bad call of inline function 內(nèi)部函數(shù)的不合法調(diào)用;在使用一個(gè)宏定 義的內(nèi)部函數(shù)時(shí),沒有正確調(diào)用。一個(gè)內(nèi)部函數(shù)以兩個(gè)下劃線(_ _)開始和結(jié)束。 Irreducible expresson tree 不可約表達(dá)式樹;文件中的表達(dá)式使得代 碼生成程序無法為其產(chǎn)生代碼。應(yīng)避免使用這種表達(dá)式。 Register allocation failure 存儲(chǔ)器分配失??;源文件中表達(dá)式太復(fù)雜, 代碼生成程序無法為它生成代碼。此時(shí)應(yīng)簡化這種繁瑣的表達(dá)式或干脆不使用它。 2:一般錯(cuò)誤: #operator not followed by macro argument name “#”運(yùn)算符后沒跟宏 變?cè)?;在宏定義中,,#用來標(biāo)識(shí)一宏變?cè)?#8220;#”后必須跟一宏變?cè)?br> ‘xxx’not an argument “xxx”不是函數(shù)參數(shù); 在源程序中將該標(biāo)識(shí)符 定義為一個(gè)函數(shù)參數(shù),但此標(biāo)識(shí)符沒有在函數(shù)的參數(shù)表中出現(xiàn)。 Ambiguous symbol‘xxx’ “xxx”是歧義性符號(hào);兩個(gè)或多個(gè)結(jié)構(gòu)體的某 一域名(結(jié)構(gòu)體變量)相同,但具有的位移、類型不同。在變量或表達(dá)式引用結(jié)構(gòu) 體分量而未帶結(jié)構(gòu)名時(shí),將產(chǎn)生歧義。這時(shí)需要修改某個(gè)域名或在引用時(shí)加上結(jié)構(gòu) 名。 Argument # missing name 參數(shù)#名丟失; 參數(shù)名已脫離用于定義函數(shù)的 函數(shù)原型。如果函數(shù)以原型定義,則該函數(shù)必須包含所有的參數(shù)名。 Argument list syntax error 參數(shù)表出現(xiàn)語法錯(cuò)誤;函數(shù)調(diào)用的一組參數(shù) 其間必須以一逗號(hào)隔開,并以一右括號(hào)結(jié)束。若源文件中包含有一個(gè)其后不是逗號(hào) 也不是右括號(hào)的參數(shù),則出現(xiàn)此錯(cuò)。 Array bound missing 數(shù)組的界限符“]”丟失;在源文件中定義了一個(gè)數(shù) 組,但此數(shù)組沒有以一右方括號(hào)結(jié)束。 Array size too large 數(shù)組長度過大;定義的數(shù)組太大,可用內(nèi)存不夠。 Assemble statement too long 匯編語句太長; 直接插入的匯編語句長度 不能超過480字節(jié)。 Bad configuration file 配置文件不正確;TURBOC.CFG配置文件中包含不 是合適命令行選擇的非注釋文字。配置文件命令選擇項(xiàng)必須以一短橫線(-)開始。 Bad file name format in include directive 包含命令中文件名格式不 正確;包含文件名必須用引號(hào)(“*.h”)或尖括號(hào)(〈*.h〉)括起來,否則 將產(chǎn)生此類錯(cuò)誤。如果使用了一個(gè)宏,則產(chǎn)生的擴(kuò)展程序文本也是不正確的(因?yàn)?br>沒有加上引號(hào))。 Bad ifdef(ifndef/undef) directive syntax ifdef(ifndef/undef)命令 語法錯(cuò)誤;#ifdef(ifndef/undef)必須以單個(gè)標(biāo) 識(shí)符(僅此一個(gè))作為該命令的體。 Bad file size syntax 位字段長語法錯(cuò)誤;一個(gè)位字段長必須是1-16位的 常量表達(dá)式。 Call of non-function 調(diào)用未定義函數(shù);正確調(diào)用的函數(shù)無定義,通常是 由于不正確的函數(shù)聲明或函數(shù)名拼寫錯(cuò)誤引起的。 Cannot modify a constant object 不能修改一個(gè)常量對(duì)象; 對(duì)定義為常 量的對(duì)象進(jìn)行不合法操作(例如常量的賦值)將引起此錯(cuò)誤。 Case outside of switch case出現(xiàn)在switch外;通常由于大括號(hào)不配對(duì)引 起的。 Case statement missing: Case語句漏掉“:”; Case syntax error case語法錯(cuò)誤; Character constant too long 字符常量太長;字符常量只能是一個(gè)或兩 個(gè)字符長。 Compound statement missing} 復(fù)合語句漏掉};通常由于花括號(hào)不配對(duì)引 起的。 Conflicting type modifiers 類型修飾符沖突;對(duì)同一指針只能指定一種 變址修飾符(如near或far);同樣對(duì)于同一函數(shù), 也只能給出一種語言修飾符( 如cdecl、pascal或interrupt)。 Constant expression required 要求常量表達(dá)式;數(shù)組的大小必須是常量。 本錯(cuò)誤通常由于#define常量的拼寫錯(cuò)誤引起的。 Could not find file‘xxx.xxx’ 找不到‘xxx.xxx’文件; 編譯程序找 不到命令行上給出的文件。 Declaration missing; 聲明漏掉分號(hào);在源文件中包含一個(gè)類型或存儲(chǔ)類 但后面漏掉了分號(hào)。 Declaration needs type or storage class 聲明必須給出類型或存儲(chǔ)類; 如聲明“i,j;”是不正確的。 Declaration syntax error 聲明出現(xiàn)語法錯(cuò)誤;在源文件中,某個(gè)聲明丟 失了某些符號(hào)或有多余的符號(hào)。 Default outside of switch Default在switch外出現(xiàn);通常是由于括號(hào)不 配對(duì)引起的。 Define directive needs an identifier Define 命令必須有一標(biāo)識(shí)符; #define后面第一個(gè)非空格必須是一標(biāo)識(shí)符。 Division by zero 除數(shù)為零; Do statement must have while do語句中必須有while; Do-while statement missing( do-while語句漏掉了“(”; Do-while statement missing) do-while語句漏掉了“)”; Do-while statement missing; do-while語句漏掉了分號(hào); Duplicate case case的情況值不唯一;switch語句的每個(gè)case必須有一個(gè) 唯一的常量表達(dá)式。 Enum syntax error enum語法錯(cuò)誤;賦給enum 類型變量的表達(dá)式不為常量 產(chǎn)生本錯(cuò)誤。 Error Directive:xxx Error命令:xxx;處理源文件中的#error命令時(shí), 顯示該命令定義的信息。 Error writing output file 寫輸出文件錯(cuò);通常是由磁盤空間引起的, 可刪除某些無用文件,重新編譯。 Expression syntax 表達(dá)式語法錯(cuò);通常是由于兩個(gè)連續(xù)操作符、 括號(hào)不 配對(duì)或缺少括號(hào),以及前一語句漏掉了分號(hào)等引起的。 Extra parameter in call 調(diào)用時(shí)出現(xiàn)多余參數(shù);調(diào)用函數(shù)時(shí),其實(shí)際參 數(shù)個(gè)數(shù)多余函數(shù)定義的參數(shù)個(gè)數(shù)。 Extra parameter in call to xxx 調(diào)用xxx函數(shù)時(shí),出現(xiàn)了多余的參數(shù); 調(diào)用一個(gè)指定函數(shù)時(shí)(該函數(shù)由原型定義)出現(xiàn)了過多的參數(shù)。 File name too long 文件名太長;#include命令給出的文件名太長,編譯 程序無法處理。DOS中的文件名不應(yīng)超過64個(gè)字符。 For statement missing( for語句漏掉“(”。 For statement missing) for語句漏掉“)”。 For statement missing; for語句漏掉“;”。 Function call missing) 函數(shù)調(diào)用缺少“)”。 Function definition out of place 函數(shù)定義位置錯(cuò);函數(shù)定義不可出現(xiàn) 在另一函數(shù)內(nèi),函數(shù)內(nèi)的任何聲明,只要以類似于帶有一個(gè)參數(shù)表的函數(shù)開始,就 被認(rèn)為是一個(gè)函數(shù)定義。 Function doesn‘t take a variable of argument 函數(shù)不接受可變的參數(shù) 個(gè)數(shù);源文件中某個(gè)函數(shù)內(nèi)使用了va_start宏,此函數(shù)不能接受可變數(shù)量的參數(shù)。 Goto statement missing label goto語句缺少標(biāo)號(hào);在goto關(guān)鍵字后面必 須有一個(gè)標(biāo)號(hào)。 If statement missing( if語句缺少“(”。 If statement missing) if語句缺少“)”。 Illegal character ‘c’(0xXX) 非法字符‘c’(0xXX);編譯程序發(fā)現(xiàn) 輸入文件中有一些非法字符,即以十六進(jìn)制形式打印的字符。 Illegal initialization 非法初始化;初始化必須是常量表達(dá)式,或是一 個(gè)全局變量extern,或是static的地址加減一常量。 Illegal octal digit 非法八進(jìn)制數(shù)。 Illegal pointer subtraction 非法指針相減; 這是由于試圖以一個(gè)非指 針變量減去一個(gè)指針變量而造成的。 Illegal structure operation 非法結(jié)構(gòu)操作;結(jié)構(gòu)只能使用(.)、取地 址(&)和賦值(=)操作符,或作為函數(shù)的參數(shù)傳遞。當(dāng)編譯程序發(fā)現(xiàn)結(jié)構(gòu)使用了 其它操作符時(shí),出現(xiàn)此錯(cuò)誤。 Illegal use of floating point 非法浮點(diǎn)運(yùn)算; 浮點(diǎn)運(yùn)算分量不允許出 現(xiàn)在位移運(yùn)算符、按位邏輯運(yùn)算符、條件(? :)、間接(*)以及其它一些運(yùn)算符 中。編譯程序發(fā)現(xiàn)上述運(yùn)算符中使用了浮點(diǎn)運(yùn)算分量時(shí),出現(xiàn)此錯(cuò)誤。 Illegal use of point 指針使用不合法;施于指針的運(yùn)算符只能是加、減、 賦值、比較、間接(*)或箭頭。如用其他運(yùn)算符,則出現(xiàn)此錯(cuò)誤。 Improper use of a typedef symbol typedef符號(hào)使用不當(dāng); 源文件中使 用了一個(gè)typedef符號(hào),符號(hào)變量應(yīng)出現(xiàn)在一個(gè)表達(dá)式中。 檢查一下此符號(hào)的說和 可能的拼寫錯(cuò)誤。 In-line assembly not allowed 不允許直接插入的匯編語句;源文件中含 有直接插入的匯編語句,若在集成環(huán)境下進(jìn)行編譯,則出現(xiàn)此錯(cuò)誤。 必須使用TCC 命令行編譯此文件。 Incompatible storage class 不相容的存儲(chǔ)類;源文件的一個(gè)函數(shù)定義中 使用了extern關(guān)鍵字,但只有static(或根本沒有存儲(chǔ)類型) 是允許的。 Incompatible type conversion 不相容的類型轉(zhuǎn)換;例如:函數(shù)與非函數(shù) 間轉(zhuǎn)換,一種結(jié)構(gòu)體或數(shù)組與一種標(biāo)準(zhǔn)類型的轉(zhuǎn)換,浮點(diǎn)數(shù)與指針間轉(zhuǎn)換等。 Incorrect command line argument:xxx 不正確的命令行參數(shù):xxx;編譯 程序視此命令行參數(shù)是非法的。 Incorrect configuration file argument:xxx 不正確的配置文件參數(shù): xxx;檢查一下前面的短橫線(-)。 Incorrect number format 不正確的數(shù)據(jù)格式; 編譯程序發(fā)現(xiàn)在十六進(jìn)制 中出現(xiàn)十進(jìn)制小數(shù)點(diǎn)。 Incorrect use of default 使用default時(shí)錯(cuò)誤;編譯程序發(fā)現(xiàn)default關(guān) 鍵字后缺少分號(hào)。 Initialize syntax error 初始化語句產(chǎn)生錯(cuò)誤; 初始化過程缺少或多出 了運(yùn)算符,或出現(xiàn)括號(hào)不匹配及其它不正常情況。 Invalid indirection 間接運(yùn)算符錯(cuò)誤; 間接運(yùn)算符(*)要求非空指針 作為運(yùn)算分量。 Invalid macro argument separator 無效的宏參數(shù)分隔符;在宏定義中, 參數(shù)必須用逗號(hào)分隔。編譯程序發(fā)現(xiàn)參數(shù)名后面有其他非法字符時(shí),出現(xiàn)此錯(cuò)誤。 Invalid pointer addition 無效的指針相加;源程序中試圖把兩個(gè)指針相 加。 Invalid use of arrow 箭頭使用錯(cuò);箭頭運(yùn)算符后必須跟一個(gè)標(biāo)識(shí)符。 Invalid use of dot 點(diǎn)使用錯(cuò);在點(diǎn)運(yùn)算符后必須跟一標(biāo)識(shí)符。 Lvalue repuired 賦值請(qǐng)求;賦值運(yùn)算符的左邊必須是一個(gè)地址表達(dá)式,包 括數(shù)值變量、指針變量、結(jié)構(gòu)引用域、間接指針和數(shù)組分量。 Macro argument syntax error 宏參數(shù)語法錯(cuò)誤; 宏定義中的參數(shù)必須是 一個(gè)標(biāo)識(shí)符。若編譯程序發(fā)現(xiàn)所需要的參數(shù)不是標(biāo)識(shí)符的字符,出現(xiàn)此錯(cuò)誤。 Macro expansion too long 宏擴(kuò)展太長;一個(gè)宏擴(kuò)展不能多于4096個(gè)字符 當(dāng)宏遞歸擴(kuò)展自身時(shí),常出現(xiàn)此錯(cuò)誤。宏不能對(duì)自身進(jìn)行擴(kuò)展。 May complied only one file when an file name is given 給出一個(gè)輸 出文件名時(shí),可能只編譯一個(gè)文件;在命令行編譯中使用-o選擇,只允許一個(gè)輸出 文件名。此時(shí),只編譯第一個(gè)文件,其他文件被忽略。 Mismatch number of parameters in definition 函數(shù)多余中參數(shù)個(gè)數(shù)不 匹配;函數(shù)定義中的參數(shù)和函數(shù)原型中提供的信息不匹配。 Misplaced break break位置錯(cuò)誤;編譯程序發(fā)現(xiàn)break語句在switch語句 或循環(huán)結(jié)構(gòu)之外。 Misplaced continue continue語句位置錯(cuò)誤;編譯程序發(fā)現(xiàn)continue語句 在循環(huán)結(jié)構(gòu)之外。 Misplaced decimal point 十進(jìn)制小數(shù)點(diǎn)位置錯(cuò); 編譯程序發(fā)現(xiàn)浮點(diǎn)常數(shù) 的指數(shù)部分有一個(gè)十進(jìn)制小數(shù)點(diǎn)。 Misplaced else else位置錯(cuò); 編譯程序發(fā)現(xiàn)else 語句缺少與之相匹配的 if語句此錯(cuò)誤的產(chǎn)生,除了由于else多余外,還有可能由于多余的分號(hào)或漏寫了大 括號(hào)及前面的if語句出現(xiàn)語法錯(cuò)誤引起的。 Misplace elif directive elif命令位置錯(cuò);編譯程序找不到與#elif相匹 配的#if、#ifdef或#ifndef命令。 Misplace else directive else命令位置錯(cuò);編譯程序找不到與#else命令 相匹配的#if、#ifdef或#ifndef命令。 Misplace endif directive endif命令位置錯(cuò);編譯程序找不到與endif相 匹配的#if、#ifdef或#ifndef命令。 Must be addressable 必須是可編址的; 取址操作(& )作用于一個(gè)不可 編址的對(duì)象,如寄存器變量。 Must take address of memory location 地址運(yùn)算符(&)不可編址的表 達(dá)式源文件中對(duì)不可編址的表達(dá)式使用了地址操作符,如對(duì)寄存器變量。 No file name ending 無文件名終止符;在#include語句中, 文件名缺少 正確的畢引號(hào)(")或右尖括號(hào)(>)。 No file name giver 未給出文件名;Turbo C編譯命令(tcc)中沒有包含 文件名。必須指定一個(gè)源文件名。 Non-portable pointer assignment 不可移植指針賦值; 源程序中將一個(gè) 指針賦給一個(gè)非指針或相反。但作為特例,允許把常量零值賦給一個(gè)指針,如果合 適,應(yīng)該強(qiáng)行抑制此錯(cuò)誤信息。 Non-portable pointer comparison 不可移植指針比較; 源程序中將一個(gè) 指針和一個(gè)非指針(常量零除外)進(jìn)行比較,如果合適,應(yīng)強(qiáng)行抑制此錯(cuò)誤信息。 Non-portable pointer conversion 不可移植返回類型轉(zhuǎn)換; 在返回語句 中的表達(dá)式類型與函數(shù)說明中的類型不同,但如果函數(shù)的返回表達(dá)式是指針,則可 以進(jìn)行轉(zhuǎn)換。此時(shí),返回指針的函數(shù)可能送回一個(gè)常量零,而零被轉(zhuǎn)換成一個(gè)適當(dāng) 的指針值。 Not an allowed type 不允許的類型;在源文件中聲明了幾種禁止的類型, 如聲明函數(shù)返回一個(gè)函數(shù)或數(shù)組。 Out of memory 內(nèi)存不夠;所有工作內(nèi)存耗盡, 應(yīng)把文件放到一臺(tái)有較大 內(nèi)存的機(jī)器去執(zhí)行或簡化源程序。 Pointer required on left side of -> ->操作符左邊須是一個(gè)指針;在 ->的左邊未出現(xiàn)指針。 Redeclaration of“xxx” “xxx”重定義;此標(biāo)識(shí)已經(jīng)定義過。 Size of structure or array not known 結(jié)構(gòu)體或數(shù)組大小不確定;有些 表達(dá)式(如size of或存儲(chǔ)說明) 中出現(xiàn)一個(gè)未定義的結(jié)構(gòu)體或一個(gè)空長度數(shù)組。 若結(jié)構(gòu)長度不需要,則在定義之前就可引用;如果數(shù)組不申請(qǐng)存儲(chǔ)空間或者初始化 時(shí)給定了長度,那么就可以定義為空長。 Statement missing; 語句缺少分號(hào);編譯程序發(fā)現(xiàn)一表達(dá)式語句后面沒有 分號(hào)。 Structure of union syntax error 結(jié)構(gòu)體或共用(聯(lián)合)語法錯(cuò)誤; 編 譯程序發(fā)現(xiàn)在struct或union關(guān)鍵字后面沒有標(biāo)識(shí)符或左花括號(hào)({)。 Structure size too large 結(jié)構(gòu)體太大;源文件中說明了一個(gè)結(jié)構(gòu)體,它 所需的內(nèi)存區(qū)域太大以致內(nèi)存不夠。 Subscripting missing] 下標(biāo)缺少“]”;編譯程序發(fā)現(xiàn)一個(gè)下標(biāo)表達(dá)式缺 少閉方括號(hào)??赡苁怯捎诼┑?、多寫操作符或括號(hào)不匹配引起的。 Switch statement missing( 語句缺少“(”; 在switch 語句中, 關(guān)鍵字 switch后面缺少左括號(hào)。 Switch statement missing) 語句缺少“)”;在switch語句中, 測(cè)試表達(dá) 式后面缺少右括號(hào)。 Too few parameters in call 函數(shù)調(diào)用參數(shù)太少;對(duì)帶有原形的函數(shù)調(diào)用 (通過一個(gè)函數(shù)指針)參數(shù)太少。原形要求給出所有參數(shù)。 Too few parameter in call to‘xxx’ 調(diào)用‘xxx’時(shí)參數(shù)太少;調(diào)用指 定的函數(shù)(該函數(shù)用一原形聲明)時(shí),給出的參數(shù)太少。 Too many cases case太多;switch語句最多只能有257個(gè)case。 Too many decimal points 十進(jìn)制小數(shù)點(diǎn)太多; 編譯程序發(fā)現(xiàn)一個(gè)浮點(diǎn)常 量中帶有不止一個(gè)十進(jìn)制小數(shù)點(diǎn)。 Too many default cases default情況太多;編譯程序發(fā)現(xiàn)一個(gè)switch 語 句中有不止一個(gè)default語句。 Too many exponents 階碼太多;編譯程序發(fā)現(xiàn)一個(gè)浮點(diǎn)常量中有不止一個(gè) 階碼。 Too many initializers 初始化太多; 編譯程序發(fā)現(xiàn)初始化比聲明所允許 的要多。 Too many storage classes in declaration 聲明中存儲(chǔ)類太多; 一個(gè)聲 明只允許有一種存儲(chǔ)類。 Too many types in declaration 聲明中類型太多; 一個(gè)聲明只允許有一 種下列基本類型:char、float、int、double、struct、union、enum或typedef。 Too much auto memory in function 函數(shù)中自動(dòng)存儲(chǔ)太多;當(dāng)函數(shù)聲明的 自動(dòng)存儲(chǔ)超過了可用的內(nèi)存空間。 Too much code define in file 文件定義的代碼太多;當(dāng)前文件中函數(shù)的 總長度超過64K字節(jié)??梢砸迫ゲ槐匾拇a或把源文件分開來寫。 Too much global data define in file 文件中定義的全局?jǐn)?shù)據(jù)太多; 全 局?jǐn)?shù)據(jù)聲明的總數(shù)超過64K字節(jié)。檢查一些數(shù)組的定義是否太長。 如果所有的聲明 都是必要的,考慮重新組織程序。 Two consecutive dots 兩連續(xù)點(diǎn);因?yàn)槭÷蕴?hào)包含三個(gè)點(diǎn),而十進(jìn)制小數(shù) 點(diǎn)和選擇運(yùn)算符使用一個(gè)點(diǎn),所以在C程序中出現(xiàn)兩個(gè)連續(xù)點(diǎn)是不允許的。 Type mismatch in parameter # 參數(shù)#類型不匹配;通過一個(gè)指針訪問已 由原形說明的參數(shù)時(shí),給定參數(shù)# N(從左到右N逐個(gè)加1)不能轉(zhuǎn)換為已聲明的 參數(shù)類型。 Type mismatch in parameter # incall to‘xxx’ 調(diào)用‘xxx ’時(shí)參數(shù)類 型不匹配;源文件中通過一個(gè)原形說明了指定的函數(shù),而給定的參數(shù)(從左到右N 逐個(gè)加1)不能轉(zhuǎn)換為已說明的參數(shù)類型。 Type mismatch in parameter‘xxx’ 參數(shù)‘xxx’類型不匹配;源文件中 通過一個(gè)原形聲明了可由函數(shù)指針調(diào)用的函數(shù),而所指定的參數(shù)不能轉(zhuǎn)換為已聲明 的參數(shù)類型。 Type mismatch in parameter‘xxx’in call to‘yyy’ 調(diào)用‘yyy’時(shí)參 數(shù)‘xxx’不匹配;源文件中通過一個(gè)原型聲明了指定的參數(shù),而指定的參數(shù)不能轉(zhuǎn) 換為另一個(gè)已聲明的參數(shù)類型。 Type mismatch in redeclaration of‘xxx’ 重定義類型不匹配;源文件 中把一個(gè)已經(jīng)聲明的變量重新聲明為另一類型。如果一個(gè)函數(shù)被調(diào)用,而后又被聲 明成非整形也會(huì)產(chǎn)生此錯(cuò)誤。發(fā)生這種情況時(shí),必須在第一次調(diào)用函數(shù)前給函數(shù)加 上extern聲明. Unable to create output file‘xxx.xxx’ 不能創(chuàng)建輸出文件‘xxx. xx x’;當(dāng)工作軟盤已滿或有寫保護(hù)時(shí)產(chǎn)生此錯(cuò)誤。如果軟盤已滿,則刪除一些不必要 的文件后重新編譯;如果軟盤有寫保護(hù),則把源文件移到一個(gè)可寫的軟盤上并重新 編譯。 Unable to create turboc.lnk 不能創(chuàng)建turboc.lnk文件; 編譯程序不能 創(chuàng)建臨時(shí)文件TURBOC.LIN因?yàn)樗荒艽嫒〈疟P或者磁盤已滿。 Unable to execute command‘xxx ’ 不能執(zhí)行‘xxx ’命令; 找不到 TLINK或MASM,或者磁盤出錯(cuò)。 Unable to open include file‘xxx.xxx’ 不能打開包含文件‘xxx.xxx’ 編譯程序找不到該包含文件??赡苁怯捎谝粋€(gè)#clude文件包含其本身引起的,也可 能是根目錄下的CONFIG.SYS中沒設(shè)置能同時(shí)打開的文件個(gè)數(shù)(試加一句files=20)。 Unable to open input file‘xxx.xxx’ 不能打開輸入文件‘xxx.xxx’; 當(dāng)編譯程序找不到源文件時(shí)出現(xiàn)此錯(cuò)誤。檢查文件名是否拼錯(cuò)或檢查對(duì)應(yīng)的軟盤或 目錄中是否有此文件。 Undefined label‘xxx’ 標(biāo)號(hào)‘xxx’未定義;函數(shù)中g(shù)oto語句后的標(biāo)號(hào)沒 有定義。 Undefined structure‘xxx’ 結(jié)構(gòu)體‘xxx’未定義;源文件中使用了未經(jīng) 說明的某個(gè)結(jié)構(gòu)體??赡苁怯捎诮Y(jié)構(gòu)體名拼寫錯(cuò)誤或缺少結(jié)構(gòu)體說明而引起的。 Undefined symbol‘xxx’ 符號(hào)‘xxx’未定義;標(biāo)識(shí)符無定義, 可能是由 于說明或引用處有拼寫錯(cuò)誤,也可能是引用標(biāo)識(shí)符說明錯(cuò)誤引起。 Unexpected end of file in comment started on line 源文件在某個(gè)注 釋中意外結(jié)束;通常是由于注釋結(jié)束標(biāo)志(*/)漏掉而引起的。 Unexpected end of file in conditional stated on line # 源文件在# 行開始的條件語句中意外結(jié)束;在編譯程序遇到#endif前程序結(jié)束, 通常是由于 #endef漏掉或拼寫錯(cuò)誤引起的。 Unknown preprocessor directive‘xxx’ 不認(rèn)識(shí)的預(yù)處理命令‘xxx’; 編譯程序在某行開始遇到“#”字符,但其后的命令名不是下列之一:define 、 undef、line、if、ifdef、ifndef、include、else或dndif。 Unterminated character constant 未終結(jié)的字符常量;編譯程序發(fā)現(xiàn)一個(gè) 不匹配的省略符。 Unterminated string 未終結(jié)的串;編譯程序發(fā)現(xiàn)一個(gè)不匹配的引號(hào)。 UNterminated string or character constant 未終結(jié)的串或字符常量;編 譯程序發(fā)現(xiàn)串或字符常量開始后沒有終結(jié)。 User break 用戶中斷;在集成環(huán)境里編譯和連接時(shí)用戶按了Ctrl+Break。 While statement missing( While的表達(dá)式語句漏掉“(”; While statement missing) While的表達(dá)式語句漏掉“)”; Wrong number of arguments in of‘xxx’ 調(diào)用‘xxx’時(shí)參數(shù)個(gè)數(shù)錯(cuò)誤; 源文件中調(diào)用某個(gè)宏時(shí),參數(shù)個(gè)數(shù)不對(duì)。 3:警告: ‘xxx’declared but never used 聲明了‘xxx’但未使用; 在源文件中 說明了此變量,但沒有使用。當(dāng)編譯程序遇到復(fù)合語句或函數(shù)的結(jié)束處括號(hào)時(shí),發(fā) 出此警告。 ‘xxx’is assigned a value which is never used ‘xxx ’被賦以一個(gè) 不使用的值;此變量出現(xiàn)在一個(gè)賦值語句里,但直到函數(shù)結(jié)束都未使用過。當(dāng)編譯 程序遇到結(jié)束的閉花括號(hào)時(shí)發(fā)出此警告。 ‘xxx’not part of structure ‘xxx’不是結(jié)構(gòu)體的一部分;出現(xiàn)在點(diǎn)或 箭頭的左邊的域名不是結(jié)構(gòu)體的一部分,或者點(diǎn)的左邊不是結(jié)構(gòu)體,箭頭左邊不指 向結(jié)構(gòu)。 Ambiguous operators need parentheses 歧義運(yùn)算符需要括號(hào);當(dāng)兩個(gè)位 移、關(guān)系或按位操作符在一起使用而不加括號(hào)時(shí),發(fā)出此警告;當(dāng)一加法或一減法 操作符不加括號(hào)與一位移操作符出現(xiàn)在一起時(shí),也發(fā)出此警告。程序員常?;煜@ 些操作符的優(yōu)先級(jí),因?yàn)樗鼈兊膬?yōu)先級(jí)不太直觀。 Both return and return of a value used 即使用返回又使用返回值;編 譯程序發(fā)現(xiàn)一個(gè)與前面定義的return不一致的return語句,發(fā)出此警告。當(dāng)某函數(shù) 只在一些return語句中返回時(shí)一般會(huì)產(chǎn)生錯(cuò)誤。 Call to function with prototype 調(diào)用無原型的函數(shù);如果“原型請(qǐng)求” 警告可用,且又調(diào)用了一個(gè)無原型的函數(shù),就發(fā)出此警告。 Call to function‘xxx’with prototype 調(diào)用無原型的函數(shù)‘xxx’;如 果“原型請(qǐng)求”警告可用,且又調(diào)用了一個(gè)原先沒有原型的函數(shù),‘xxx’就發(fā)出此 警告。 Code has no effect 代碼無效;當(dāng)編譯程序發(fā)現(xiàn)一個(gè)含有無效操作符的語 句時(shí),發(fā)出此警告。例如語句“a+b;”對(duì)每一個(gè)變量都不起作用,無需操作,且可 能引起一個(gè)錯(cuò)誤。 Constant is long 常量是long類型;若編譯程序遇到一個(gè)十進(jìn)制常量大于 32767,或一個(gè)八進(jìn)制常量大于65535,而其后無字母“l”或“L”,把此常量當(dāng)做 long類型處理。 Constant out of range in comparison 比較時(shí)常量超出了范圍; 在源文 件中有一比較語句,其中一個(gè)常量子表達(dá)式超出了另一個(gè)子表達(dá)式類型所允許的范 圍。如一個(gè)無符號(hào)量與-1比較就無意義。為得到一個(gè)大于32767 (十進(jìn)制)的無符 號(hào)常量,可以在常量前加上unsigned或在常量后加字母“u”或“U”。 Conversion may lose significant digits 轉(zhuǎn)換可能丟掉高位數(shù)字;在賦 值操作或其它情況下,源程序要求把long或unsigned long型轉(zhuǎn)變成int或unsigned int型。在有些機(jī)器上,因?yàn)閕nt型和long型變量具有相同長度, 這種轉(zhuǎn)換可能改 變程序的輸出特性。無論此警告何時(shí)發(fā)生編譯程序仍將產(chǎn)生代碼來做比較。如果代 碼比較后總是給出同樣結(jié)果,比如一個(gè)字符表達(dá)式與4000比較,則代碼總要進(jìn)行測(cè) 試。這還表示一個(gè)無符號(hào)表達(dá)式可以與-1進(jìn)行比較,因?yàn)?087機(jī)器上,一個(gè)無符號(hào) 表達(dá)式與-1有相同的位模式。 Function should return a value 函數(shù)應(yīng)該返回一個(gè)值;源文件聲明的當(dāng) 前函數(shù)的返回類型既非int型也非void型,但編譯程序未發(fā)現(xiàn)返回值。返回int的函 數(shù)可以不說明,因?yàn)樵诶习姹镜腃語言中,沒有void類型來指出函數(shù)不返回值。 Mixing pointers to signed and unsigned char 混淆signed和unsigned char指針;沒有通過顯示的強(qiáng)制類型轉(zhuǎn)換,就把一個(gè)字符指針轉(zhuǎn)換為無符號(hào)指針, 或把一個(gè)無符號(hào)指針轉(zhuǎn)變?yōu)樽址羔槨?br> No decaration for function‘xxx’ 函數(shù)‘xxx’沒有聲明;當(dāng)“聲明請(qǐng) 求”警告可用,而又調(diào)用了一個(gè)沒有預(yù)先聲明的函數(shù)時(shí),發(fā)出此警告。函數(shù)聲明可 以是傳統(tǒng)的,也可以是現(xiàn)代(原型)的風(fēng)格。 Non-portable pointer assignment 不可移植指針賦值; 源文件中把一個(gè) 指針賦給另一個(gè)非指針或相反。作為特例,可以把常量0賦給一指針。如果合適, 可以強(qiáng)制抑制此警告。 Non-portable pointer comparison 不可移植比較; 源文件中把一個(gè)指針 和另一非指針(非常量零)進(jìn)行比較。如果合適,可以強(qiáng)行抑制本警告。 Non-portable return type conversion 不可移植返回類型轉(zhuǎn)換; return 語句中的表達(dá)式類型和函數(shù)聲明的類型不一致。作為特例,如果函數(shù)或返回表達(dá)式 是一個(gè)指針,這是可以的。在此情況下返回指針的函數(shù)可能返回一個(gè)常量零,而零 被轉(zhuǎn)換成一個(gè)適當(dāng)?shù)闹羔樦怠?br> Parameter‘xxx’is never used 參數(shù)‘xxx’從未使用;函數(shù)說明中的某 函數(shù)在函數(shù)體里從未使用。這可以但不一定是一個(gè)錯(cuò)誤,通常是由于參數(shù)名拼寫錯(cuò) 誤引起的。如果在函數(shù)體內(nèi),該標(biāo)識(shí)符被重新定義為一個(gè)自動(dòng)(局部)變量,也將 產(chǎn)生本警告。此參數(shù)被標(biāo)識(shí)為一個(gè)自動(dòng)變量但未使用。 Possible use of‘xxx’before definition 在定義‘xxx’之前 可能已使用此條件。如果改變量出現(xiàn)的物理位置在對(duì)它賦值之前,就會(huì)產(chǎn)生本警告 ,當(dāng)然程序的實(shí)際流程可能在使用前已賦值。 Possible incorrect assignment 可能的不正確賦值;當(dāng)編譯程序遇到賦 值操作符作為條件表達(dá)式(如if,while或do-while語句的一部分)的主操作符時(shí), 發(fā)生本警告,通常是由于把賦值號(hào)當(dāng)做等號(hào)使用了。若希望禁止此警告,則可把賦 值語句用括號(hào)括起來,并把它與零作顯式比較。如:if(a=b)應(yīng)寫作if(a=b)!=0。 Redefinition of‘xxx’is not identical ‘xxx’的重定義不相同;源文 件對(duì)命名宏重定義時(shí),使用的正文內(nèi)容與第一次定義時(shí)不同,新內(nèi)容將代替舊內(nèi)容。 Restarting compiler using assembly 用匯編重新啟動(dòng)編譯;編譯程序遇 到一個(gè)未使用命令行選擇項(xiàng)-B或#pragma inline語句的asm,通過時(shí)用匯編重新啟 動(dòng)編譯。 Structure passed by value 結(jié)構(gòu)按值傳達(dá);如果“結(jié)構(gòu)按值傳達(dá)”警告可 用,則在結(jié)構(gòu)作為參數(shù)按值傳達(dá)時(shí)產(chǎn)生本警告。通常是在編制程序時(shí),把結(jié)構(gòu)體作 為參數(shù)傳遞,而又漏掉了地址操作符(&)。 因?yàn)榻Y(jié)構(gòu)體可以按值傳達(dá),所以這種 遺漏是可以接收的。本警告只起到一個(gè)提示作用。 Superfluous & with function or array 在函數(shù)或數(shù)組中有多余的“&” 號(hào);取址操作符(&)對(duì)一個(gè)數(shù)組或函數(shù)名是不必要的,應(yīng)該去掉。 Suspicious pointer conversion 可疑的指針轉(zhuǎn)換; 編譯程序遇到一些指 針轉(zhuǎn)換,這些轉(zhuǎn)換引起指針指向不同的類型。如果合適,應(yīng)強(qiáng)行抑制此警告。 Undefined structure‘xxx’ 結(jié)構(gòu)體‘xxx’未定義; 在源文件中使用了 該結(jié)構(gòu),但未定義。可能是由于結(jié)構(gòu)體名拼寫錯(cuò)誤或忘記定義而引起的。 Unknown assembler instruction 不認(rèn)識(shí)的匯編命令; 編譯程序發(fā)現(xiàn)在插 入的匯編語句中有一個(gè)不允許的操作碼。檢查此操作的拼寫,并查看一下操作碼表 看該命令能否被接受。 Unreachable code 不可達(dá)代碼; break、continue、goto或return語句后 沒有跟標(biāo)號(hào)或循環(huán)函數(shù)的結(jié)束符。編譯程序使用一個(gè)常量測(cè)試條件來檢查while、do 和for循環(huán),并試圖知道循環(huán)沒有失敗。 Void function may not return a value void函數(shù)不可以返回值;源文件 中的當(dāng)前函數(shù)說明為void,但編譯程序發(fā)現(xiàn)一個(gè)帶值的返回語句,該返回語句的值 將被忽略。 Zero length structure 結(jié)構(gòu)長度為零; 在源文件中定義了一個(gè)總長度為 零的結(jié)構(gòu),對(duì)此結(jié)構(gòu)的任何使用都是錯(cuò)誤的。 |
|