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