C51中編譯錯(cuò)誤信息
致命錯(cuò)誤
致命錯(cuò)誤立即終止編譯這些錯(cuò)誤通常是命令行指定的無(wú)效選項(xiàng)的結(jié)果當(dāng)編譯器不
能訪問(wèn)一個(gè)特定的源包含文件時(shí)也產(chǎn)生致命錯(cuò)誤
致命錯(cuò)誤信息采用下面的格式
C51 FATAL-ERROR –
ACTION :
LINE:
ERROR:
C51 TERMIANTED.
C51 FATAL-ERROR –
ACTION:
FILE:
ERROR:
C51 TERMIANTED.
下面說(shuō)明Action和Error中可能的內(nèi)容
Actions
ALLOCATING MEMORY
編譯器不能分配足夠的存儲(chǔ)區(qū)來(lái)編譯指定的源文件.
CREATING LIST-FILE/OBJECT-FILE/WORKFILE
編譯器不能建立列表文件,OBJ文件,或工作文件這個(gè)錯(cuò)誤的出現(xiàn)可能是磁盤(pán)
滿或?qū)懕Wo(hù),或文件已存在和只讀.
GENERATING INTERMEDIATE CODE
源文件包含的一個(gè)函數(shù)太大,不能被編譯器編譯成虛擬代碼.嘗試把函數(shù)分小或
重新編譯.
OPENING INPUT-FILE
編譯器不能發(fā)現(xiàn)或打開(kāi)所選的源或包含文件.
PARSING INVOKE-/#PRAGMA-LINE
當(dāng)在命令行檢測(cè)到參數(shù)計(jì)算,或在一個(gè)#pragma中檢測(cè)到參數(shù)計(jì)算,就產(chǎn)生這樣
的錯(cuò)誤.
PARSING SOURCE-FILE / ANALYZING DECLARATIONS
源文件包含太多的外部參考.減少源文件訪問(wèn)的外部變量和函數(shù)的數(shù)目.
WRITING TO FILE
當(dāng)寫(xiě)入列表文件,OBJ文件,或工作文件時(shí)遇到的錯(cuò)誤.
Errors
‘(‘ AFTER CONTROL EXPECTED
一些控制參數(shù)需要用括號(hào)包含一個(gè)參數(shù).當(dāng)沒(méi)有左括號(hào)時(shí)顯示本信息.
‘)’ AFTER PARAMETER EXPECTED
本信息表示包含沒(méi)有參數(shù)的右括號(hào).
BAD DIGIT IN NUMBER
一個(gè)控制參數(shù)的數(shù)字參數(shù)包含無(wú)效字符.只能是十進(jìn)制數(shù).
CAN’T CREATE FILE
在FILE行定義的文件名不能建立.
CAN’T HAVE GERERAL CONTROL IN INVOCATION LINE
一般控制(例如EJECT)不能包含在命令行.把這些控制用#pragma聲明放在
源文件中.
FILE DOES NOT EXIST
沒(méi)有發(fā)現(xiàn)定義在FILE行的文件.
FILE WRITE-ERROR
因?yàn)榇疟P(pán)空間不夠,寫(xiě)到列表,預(yù)打印,工作,或目標(biāo)文件時(shí)出錯(cuò).
IDENTIFIER EXPECTED
當(dāng)DEFINE控制沒(méi)有參數(shù)時(shí)產(chǎn)生本信息.DEFINE要求一個(gè)參數(shù)作為標(biāo)識(shí)符.這
和C語(yǔ)言的規(guī)則相同.
MEMORY SPACE EXHAUSTED
編譯器不能分配足夠的存儲(chǔ)區(qū)來(lái)編譯指定的源文件.如果始終出現(xiàn)這個(gè)信息,應(yīng)
該把源文件分成兩個(gè)或多個(gè)小文件再重新編譯.
MORE THAN 100 ERRORS IN SOURCE-FILE
在編譯時(shí)檢測(cè)到的錯(cuò)誤超過(guò)100個(gè).這使編譯器終止.
MORE THAN 256 SEGMENTS/EXTERNALS
在一個(gè)源文件中的參考超過(guò)256.個(gè)單個(gè)的源文件不能有超過(guò)256個(gè)函數(shù)或外部參
考.這是INTEL目標(biāo)模塊格式(OMF-51)的歷史的限制.包含標(biāo)量和/或bit聲明
的函數(shù)在OBJ文件中生成兩個(gè),有時(shí)候三個(gè)段定義
NON-NULL ARGUMENT EXPECTED
所選的控制參數(shù)需要用括號(hào)包含一個(gè)參數(shù)(例如,一個(gè)文件名或一個(gè)數(shù)字)
OUT OF RANGE NUMBER
一個(gè)控制參數(shù)的數(shù)字參數(shù)超出范圍.例如OPTIMIZE控制只允許數(shù)字0到6,值
7就將產(chǎn)生本錯(cuò)誤信息.
PARSE STACK OVERFLOW
解析堆棧溢出.如果源程序包含很復(fù)雜的表達(dá)式或如果塊的嵌套深度超過(guò)31級(jí),
就會(huì)出現(xiàn)這個(gè)錯(cuò)誤
PREPROCESSOR: LINE TOO LONG( 32K)
一個(gè)中間擴(kuò)展長(zhǎng)度超過(guò)32K字符.
PREPROCESSOR: MACROS TOO NESTED
在宏擴(kuò)展期間,預(yù)處理器所用的堆棧太大.這個(gè)信息通常表示一個(gè)遞歸的宏定義,
但也可表示一個(gè)宏嵌套太多.
RESPECIFIED OR CONFLICTING CONTROL
一個(gè)命令行參數(shù)指定了兩次,或命令行參數(shù)沖突.
SOURCE MUST COME FROM A DISK-FILE
源和包含文件必須存在.控制臺(tái)CON;,; CI;,或類(lèi)似的設(shè)備不能作為輸入文件.
UNKNOWN CONTROL
所選的控制參數(shù)不認(rèn)識(shí).
語(yǔ)法和語(yǔ)義錯(cuò)誤
語(yǔ)法和語(yǔ)義錯(cuò)誤一般出現(xiàn)在源程序中.它們確定實(shí)際的編程錯(cuò)誤.當(dāng)遇到這些錯(cuò)誤時(shí),
編譯器嘗試?yán)@過(guò)錯(cuò)誤繼續(xù)處理源文件.當(dāng)遇到更多的錯(cuò)誤時(shí),編譯器輸出另外的錯(cuò)誤,
信息但是不產(chǎn)生OBJ文件.
語(yǔ)法和語(yǔ)義錯(cuò)誤在列表文件中生成一條信息這些錯(cuò)誤信息用下面的格式
*** ERRORnumberIN LINElineOFfile:error message
這里
number錯(cuò)誤號(hào)
line對(duì)應(yīng)源文件或包含文件的行號(hào)
file產(chǎn)生錯(cuò)誤的源或包含文件名
error message對(duì)錯(cuò)誤的敘述說(shuō)明
下表按錯(cuò)誤號(hào)列出了語(yǔ)法和語(yǔ)義錯(cuò)誤錯(cuò)誤信息列出了主要說(shuō)明和可能的原因和改正
號(hào)錯(cuò)誤信息和說(shuō)明
100跳過(guò)不可打印字符0x??
在源文件中發(fā)現(xiàn)一個(gè)非法字符.(注意不檢查注釋中的字符)
101字符串沒(méi)結(jié)束
一個(gè)字符串沒(méi)有用雙引號(hào)終止.
102字符串太長(zhǎng)
一個(gè)字符串不能超過(guò)4096個(gè)字符用串聯(lián)符號(hào)在邏輯上可延長(zhǎng)字符串
超過(guò)4096個(gè)字符這個(gè)模式的行終止符在詞匯分析時(shí)是連續(xù)的
103無(wú)效的字符常數(shù)
一個(gè)字符常數(shù)的格式無(wú)效符號(hào)c是無(wú)效的除非c是任何可打印的ASCII
字符
125聲明符太復(fù)雜20
一個(gè)目標(biāo)的聲明可包含最多20個(gè)類(lèi)型修飾符[ ] *這
個(gè)錯(cuò)誤經(jīng)常伴隨著錯(cuò)誤126
126類(lèi)型堆棧下溢
類(lèi)型聲明堆棧下溢這個(gè)錯(cuò)誤通常死錯(cuò)誤125的副產(chǎn)品
127無(wú)效存儲(chǔ)類(lèi)
一個(gè)目標(biāo)用一個(gè)無(wú)效的存儲(chǔ)空間標(biāo)識(shí)符聲明如果一個(gè)目標(biāo)在一個(gè)函數(shù)外用存
儲(chǔ)類(lèi)auto或register聲明就會(huì)產(chǎn)生本錯(cuò)誤
129在標(biāo)記前缺少
本錯(cuò)誤通常表示前一行缺少分號(hào)當(dāng)出現(xiàn)本錯(cuò)誤時(shí)編譯器會(huì)產(chǎn)生很多錯(cuò)誤信
息
130值超出范圍
在一個(gè)using或interrupt標(biāo)識(shí)符后的數(shù)字參數(shù)是無(wú)效的using標(biāo)識(shí)符要求一個(gè)0
到3之間的寄存器組號(hào)interrupt標(biāo)識(shí)符要求一個(gè)0到31之間的中斷矢量號(hào)
131函數(shù)參數(shù)重復(fù)
一個(gè)函數(shù)有相同的參數(shù)名在函數(shù)聲明中參數(shù)名必須是唯一的
132沒(méi)在正式的參數(shù)列表
一個(gè)函數(shù)的參數(shù)聲明用了一個(gè)名稱沒(méi)在參數(shù)名列表中例如
char function(v0,v1,v2)
char *v0,*v1,*v5;
/* ‘v5’沒(méi)在正式列表中*/
{
/* … */
}
134函數(shù)的xdata/idata/pdata/data不允許
函數(shù)通常位于code存儲(chǔ)區(qū)不能在別的存儲(chǔ)區(qū)運(yùn)行函數(shù)默認(rèn)定義為存儲(chǔ)類(lèi)型
code
135 bit的存儲(chǔ)類(lèi)錯(cuò)
bit標(biāo)量的聲明可能包含一個(gè)static或extern存儲(chǔ)類(lèi)register或alien類(lèi)是無(wú)效的
136變量用了void
void類(lèi)型只允許作為一個(gè)不存在的返回值或一個(gè)函數(shù)的空參數(shù)列表void
func(void)或和一個(gè)指針組合void *
138 Interrupt()不能接受或返回值
一個(gè)中斷函數(shù)被定義了一個(gè)或多個(gè)正式的參數(shù)或一個(gè)返回值中斷函數(shù)不能
包含調(diào)用參數(shù)或返回值
140位在非法的存儲(chǔ)空間
bit標(biāo)量的定義可以包含可選的存儲(chǔ)類(lèi)型data如果沒(méi)有存儲(chǔ)類(lèi)型則默認(rèn)為
data因?yàn)槲煌ǔT趦?nèi)部數(shù)據(jù)存儲(chǔ)區(qū)當(dāng)試圖對(duì)一個(gè)bit標(biāo)量定義別的數(shù)據(jù)類(lèi)型
時(shí)會(huì)產(chǎn)生本錯(cuò)誤
141臨近標(biāo)志語(yǔ)法錯(cuò)誤期待別的標(biāo)志…
編譯器所見(jiàn)的標(biāo)志是錯(cuò)誤的參考所顯示的期待的內(nèi)容
142無(wú)效的基地址
一個(gè)sfr或sbit聲明的基地址是錯(cuò)誤的有效的基地址范圍在0x80到0xFF之間
如果用符號(hào)基地址^位號(hào)聲明則基地址必須是8的倍數(shù)
143無(wú)效的絕對(duì)位地址
sbit聲明中的絕對(duì)位地址必須在0x80到0xFF之間
144基地址^位號(hào)無(wú)效的位號(hào)
sbit聲明中定義的位號(hào)必須在0到7之間
145未知的sfr
146無(wú)效sfr
一個(gè)絕對(duì)位基地址^位號(hào)的聲明包含一個(gè)無(wú)效的基地址標(biāo)識(shí)符基地址必
須是已經(jīng)聲明的sfr任何別的名稱是無(wú)效的
147目標(biāo)文件太大
單個(gè)目標(biāo)文件不能超過(guò)65535 64K字節(jié)-1
149 struct/union包含函數(shù)成員
struct或union不能包含一個(gè)函數(shù)類(lèi)型的成員但是指向函數(shù)的指針是可以的
150 struct/union包含一個(gè)bit成員
一個(gè)union不能包含bit類(lèi)型成員這是8051的結(jié)構(gòu)決定的
151 struct/union自我關(guān)聯(lián)
一個(gè)結(jié)構(gòu)不能包含自己
152位號(hào)超出位域
位域聲明中指定的位號(hào)超過(guò)給定基類(lèi)的位號(hào)
153命名的位域不能為零
命名的位域?yàn)榱阒灰疵奈挥蛟试S為零
154位域指針
指向位域的指針不允許
155位域要求char/int
位域的基類(lèi)要求char或int unsigned char和unsigned int類(lèi)型也行
156 alien只允許對(duì)函數(shù)
157 alien函數(shù)帶可變參數(shù)
存儲(chǔ)類(lèi)alien只對(duì)外部PL/M-51函數(shù)允許符號(hào)char *,…在alien函數(shù)中是非
法的PL/M-51函數(shù)通常要求一個(gè)固定的參數(shù)表
158函數(shù)包含未命名的參數(shù)
一個(gè)函數(shù)的參數(shù)列表定義包含一個(gè)未命名的抽象類(lèi)型定義這個(gè)符號(hào)只允許在
函數(shù)原型中
159 void后面帶類(lèi)型
函數(shù)的原型聲明可包含一個(gè)空參數(shù)列表例如int func(void)在void后不
能再有類(lèi)型定義
160 void無(wú)效
void類(lèi)型只在和指針組合或作為一個(gè)函數(shù)的不存在的返回值中是合法的
161忽視了正式參數(shù)
在一個(gè)函數(shù)內(nèi)一個(gè)外部函數(shù)的聲明用了一個(gè)沒(méi)有類(lèi)型標(biāo)識(shí)符的參數(shù)名列表例
如extern yylex(a,b,c);
180不能指向一個(gè)函數(shù)
指向一個(gè)函數(shù)的類(lèi)型是無(wú)效的嘗試用指針指向一個(gè)函數(shù)
181操作數(shù)不兼容
對(duì)給定的操作符至少一個(gè)操作數(shù)類(lèi)型是無(wú)效的例如~float_type
183左值不能修改
要修改的目標(biāo)位于code存儲(chǔ)區(qū)或有const屬性因此不能修改
184 sizeof非法操作數(shù)
sizeof操作符不能確定一個(gè)函數(shù)或位域的大小
185不同的存儲(chǔ)空間
一個(gè)目標(biāo)聲明的存儲(chǔ)空間和前一個(gè)同樣目標(biāo)聲明的存儲(chǔ)空間不同
186解除參照無(wú)效
一個(gè)內(nèi)部編譯器問(wèn)題會(huì)產(chǎn)生本信息如果本錯(cuò)誤重復(fù)出現(xiàn)請(qǐng)和技術(shù)支持接洽
187不是一個(gè)左值
所需的參數(shù)必須是一個(gè)可修改的目標(biāo)地址
188未知目標(biāo)大小
因?yàn)闆](méi)有一個(gè)數(shù)組的維數(shù)或間接通過(guò)一個(gè)void指針一個(gè)目標(biāo)的大小不能計(jì)
算
189 &對(duì)bit/sfr非法
取地址符’&’不允許對(duì)bit目標(biāo)或特殊函數(shù)寄存器sfr
190 &不是一個(gè)左值
嘗試建立一個(gè)指針指向一個(gè)未知目標(biāo)
193非法操作類(lèi)型
193對(duì)ptr非法add/sub
193對(duì)bit的非法操作
193錯(cuò)誤操作數(shù)類(lèi)型
當(dāng)對(duì)一個(gè)給定的操作符用了非法的操作數(shù)類(lèi)型時(shí)產(chǎn)生本錯(cuò)誤例如無(wú)效的表
達(dá)式如bit*bitptr+ptr或ptr*anything這個(gè)錯(cuò)誤信息包括引起錯(cuò)誤的操作
符
下面的操作對(duì)bit類(lèi)型的操作數(shù)是可行的
??賦值=
??OR/復(fù)合OR ||=
??AND/復(fù)合AND& &=
??XOR/復(fù)合XOR^ ^=
??bit比較= = !=
??取反~
bit操作數(shù)可和別的數(shù)據(jù)類(lèi)型在表達(dá)式中混用在這種情況類(lèi)型轉(zhuǎn)換自動(dòng)執(zhí)行
194 *間接指向一個(gè)未知大小的目標(biāo)
間接操作符*不能和void指針合用因?yàn)橹羔標(biāo)傅哪繕?biāo)的大小是未知的
195 *間接非法
*操作符不能用到非指針參數(shù)
196存儲(chǔ)空間可能無(wú)效
轉(zhuǎn)換一個(gè)常數(shù)到一個(gè)指針常數(shù)產(chǎn)生一個(gè)無(wú)效的存儲(chǔ)空間例如char
*p=0x91234
198 sizeof返回零
sizeof操作符返回一個(gè)零
199 ->’的左邊要求struct/union指針
->操作符的左邊參數(shù)必須是一個(gè)struct指針或一個(gè)union指針
200 .左邊要求struct/union
.操作符的左邊參數(shù)要求必須是struct或union類(lèi)型
201未定義的struct/union
給定的struct或union名是未知的
202未定義的標(biāo)識(shí)符
給定的標(biāo)識(shí)符是未定義的
203錯(cuò)誤的存儲(chǔ)類(lèi)參考名
本錯(cuò)誤表示編譯器的一個(gè)問(wèn)題如果重復(fù)出現(xiàn)請(qǐng)接洽技術(shù)支持
204未定義的成員
給定的一個(gè)struct或union成員名是未定義的
205不能調(diào)用一個(gè)中斷函數(shù)
一個(gè)中斷函數(shù)不能象一個(gè)正常函數(shù)一樣調(diào)用中斷的入口和退出代碼是特殊
的
207參數(shù)列表聲明為void
參數(shù)列表聲明為void的函數(shù)不能從調(diào)用者接收參數(shù)
208太多的實(shí)參
函數(shù)調(diào)用包含太多的實(shí)參
209太少的實(shí)參
調(diào)用函數(shù)包含太少的實(shí)參
210太多的嵌套調(diào)用
函數(shù)的嵌套調(diào)用不能超過(guò)10級(jí)
211調(diào)用不是對(duì)一個(gè)函數(shù)
一個(gè)函數(shù)的調(diào)用項(xiàng)不是對(duì)一個(gè)函數(shù)或函數(shù)指針求值
212間接調(diào)用寄存器的參數(shù)不匹配
通過(guò)一個(gè)指針的間接函數(shù)調(diào)用不包含實(shí)際的參數(shù)一個(gè)例外是當(dāng)所有的參數(shù)可
以通過(guò)寄存器傳遞這是由于Cx51所用的傳遞參數(shù)的方法被調(diào)用的函數(shù)名
必須是已知的因?yàn)閰?shù)寫(xiě)到被調(diào)用函數(shù)的數(shù)據(jù)段但是對(duì)間接調(diào)用來(lái)說(shuō)
被調(diào)用函數(shù)的名稱是未知的
213賦值符的左邊不是一個(gè)左值
賦值符的左邊要求一個(gè)可修改目標(biāo)的地址
214非法指針轉(zhuǎn)換
bit float或集合類(lèi)型的目標(biāo)不能轉(zhuǎn)換為指針
215非法類(lèi)型轉(zhuǎn)換
struct/union/void不能轉(zhuǎn)換為任何別的類(lèi)型
216標(biāo)號(hào)用在非數(shù)組中或維數(shù)超出
一個(gè)數(shù)組引用包含太大的維數(shù)或目標(biāo)不是一個(gè)數(shù)組
217非整數(shù)索引
一個(gè)數(shù)組的維數(shù)表達(dá)式必須是char unsigned char int或unsigned int類(lèi)型
別的類(lèi)型都是非法的
218控制表達(dá)式用了void類(lèi)型
在一個(gè)while for或do的限制表達(dá)式中不能用類(lèi)型void
219 long常數(shù)縮減為int
一個(gè)常數(shù)表達(dá)式的值必須能用一個(gè)int類(lèi)型表示
220非法常數(shù)表達(dá)式
期望一個(gè)常數(shù)表達(dá)式目標(biāo)名變量或函數(shù)不允許出現(xiàn)在常數(shù)表達(dá)式中
221非常數(shù)case/dim表達(dá)式
一個(gè)case或一個(gè)維數(shù)[ ]必須是一個(gè)常數(shù)表達(dá)式
222被零除
223被零取模
編譯器檢測(cè)到一個(gè)被零除或取模
225表達(dá)式太復(fù)雜需簡(jiǎn)化
一個(gè)表達(dá)式太復(fù)雜必須分成兩個(gè)或多個(gè)子表達(dá)式
226重復(fù)的struct/union/enum標(biāo)記
一個(gè)struct union或enum名早已定義
227表示一個(gè)union標(biāo)記
一個(gè)union名稱早已定義為別的類(lèi)型
228表示一個(gè)struct標(biāo)記
一個(gè)struct名早已定義為別的類(lèi)型
229表示一個(gè)enum標(biāo)記
一個(gè)enum名早已定義為別的類(lèi)型
230未知的struct/union/enum標(biāo)記
指定的struct union或enum名未定義
231重復(fù)定義
指定的名稱已被定義
232重復(fù)標(biāo)號(hào)
指定的標(biāo)號(hào)已定義
233未定義標(biāo)號(hào)
表示一個(gè)標(biāo)號(hào)未定義有時(shí)候這個(gè)信息會(huì)在實(shí)際的標(biāo)號(hào)的幾行后出現(xiàn)這是所
用的未定義標(biāo)號(hào)的搜索方法引起的
234 {堆棧范圍溢出31
超過(guò)了最多31個(gè)嵌套塊超出的嵌套塊被忽略
235參數(shù)<數(shù)字>不同類(lèi)型
函數(shù)聲明的參數(shù)類(lèi)型和函數(shù)原型中的不同
236參數(shù)列表的長(zhǎng)度不同
函數(shù)聲明中的參數(shù)數(shù)目和函數(shù)原型中的不同
237函數(shù)早已定義
試圖聲明一個(gè)函數(shù)體兩次
238重復(fù)成員
239重復(fù)參數(shù)
試圖定義一個(gè)已存在的struct成員或函數(shù)參數(shù)
240超出128個(gè)局部bit
在一個(gè)函數(shù)內(nèi)不能超過(guò)128個(gè)bit標(biāo)量
241 auto段太大
局部目標(biāo)所需的空間超過(guò)模式的極限最大的段大小定義如下
SMALL128字節(jié)
COMPACT256字節(jié)
LARGE65535字節(jié)
242太多的初始化軟件
初始化軟件的數(shù)目超過(guò)初始化目標(biāo)的數(shù)量
243字符串超出范圍
字符串中的字符數(shù)目超出字符串初始化的數(shù)目
244不能初始化錯(cuò)誤的類(lèi)型或類(lèi)
試圖初始化一個(gè)bit或sfr
245未知的pragma跳過(guò)本行
#pragma狀態(tài)未知所以整行被忽略
246浮點(diǎn)錯(cuò)誤
當(dāng)一個(gè)浮點(diǎn)參數(shù)超出32位的范圍就產(chǎn)生本錯(cuò)誤32位IEEE值的范圍是
±1.175494E-38到±3.402823E+38
247非地址/常數(shù)初始化
一個(gè)有效的初始化表達(dá)式必須是一個(gè)常數(shù)值求值或一個(gè)目標(biāo)名加或減去一個(gè)常
數(shù)
248集合初始化需要大括號(hào)
給定struct或union初始化缺少大括號(hào){}
249段<名>段太大
編譯器檢測(cè)到一個(gè)數(shù)據(jù)段太大一個(gè)數(shù)據(jù)段的最大的大小由存儲(chǔ)空間決定
250 esc值超過(guò)255
一個(gè)字符串常數(shù)中的轉(zhuǎn)義序列超過(guò)有效值范圍最大值是255
252非法八進(jìn)制數(shù)
指定的字符不是一個(gè)有效的八進(jìn)制數(shù)
252主要控制放錯(cuò)地方行被忽略
主要控制必須被指定在C模塊的開(kāi)頭在任何#include命令或聲明前
253內(nèi)部錯(cuò)誤ASMGENCLASS
在下列情況下出現(xiàn)本錯(cuò)誤
??一個(gè)內(nèi)在函數(shù)例如_testbit_被錯(cuò)誤激活這種情況是在沒(méi)有函數(shù)原
型存在和實(shí)參數(shù)目或類(lèi)型錯(cuò)誤對(duì)這種原因必須使用合適的聲明文件
INTRINS.H STRING.H參考第八章中的instrinsic函數(shù)
??Cx51確認(rèn)一個(gè)內(nèi)部一致性問(wèn)題請(qǐng)接洽技術(shù)支持
255 switch表達(dá)式有非法類(lèi)型
在一個(gè)switch表達(dá)式?jīng)]有合法的數(shù)據(jù)類(lèi)型
256存儲(chǔ)模式?jīng)_突
一個(gè)包含alien屬性的函數(shù)只能包含模式標(biāo)識(shí)符small函數(shù)的參數(shù)必須位于內(nèi)
部數(shù)據(jù)區(qū)這適用于所有的外部alien聲明和alien函數(shù)例如
alien plm_func(char c) large {…}
產(chǎn)生錯(cuò)誤256
257 alien函數(shù)不能重入
一個(gè)包含alien屬性的函數(shù)不能同時(shí)包含reentrant屬性函數(shù)參數(shù)不能跳過(guò)虛擬
堆棧傳遞這適用于所有的外部alien聲明和alien函數(shù)
258 struct/union成員的存儲(chǔ)空間非法
非法空間的參數(shù)被忽略
一個(gè)結(jié)構(gòu)的成員或參數(shù)不能包含一個(gè)存儲(chǔ)類(lèi)型標(biāo)識(shí)符但指針?biāo)傅哪繕?biāo)可
能包含一個(gè)存儲(chǔ)類(lèi)型例如
struct vp{char code c;int xdata i; };
產(chǎn)生錯(cuò)誤258
struct v1{char c;int xdata *i; };
是正確的struct聲明
259指針不同的存儲(chǔ)空間
一個(gè)空指針被關(guān)聯(lián)到別的不同存儲(chǔ)空間的空指針例如
char xdata *p1;
char idata *p2;
p1 = p2; /*不同的存儲(chǔ)空間*/
260指針斷開(kāi)
一個(gè)空指針被關(guān)聯(lián)到一些常數(shù)值這些值超過(guò)了指針存儲(chǔ)空間的值范圍例如
char idata *p1 = 0x1234; /*結(jié)果是0x34 */
261 reentrant()內(nèi)有bit
一個(gè)可重入屬性的函數(shù)的聲明中不能包含bit目標(biāo)例如
int func1(int i1) reentrant {
bit b1,b2; /*不允許*/
return(i1-1);
}
262 using/disable不能返回bit值
用using屬性聲明的函數(shù)和禁止中斷#pragma disable的函數(shù)不能返回一個(gè)bit
值給調(diào)用者例如
bit test(void) using 3
{
bit b0;
return(b0);
}
產(chǎn)生錯(cuò)誤262
263保存/恢復(fù)堆棧保存溢出/下溢
#pragma save的最大嵌套深度是八級(jí)堆棧的pragma save和restore工作根據(jù)
LIFO后進(jìn)先出規(guī)則
264內(nèi)在的<內(nèi)在的名稱>聲明/激活錯(cuò)誤
本錯(cuò)誤表示一個(gè)內(nèi)在的函數(shù)錯(cuò)誤定義參數(shù)數(shù)目或省略號(hào)如果用標(biāo)準(zhǔn)的.H
文件就不會(huì)產(chǎn)生本錯(cuò)誤確認(rèn)使用了Cx51所有的.H文件不要嘗試對(duì)內(nèi)在的
庫(kù)函數(shù)定義自己的原型
265對(duì)非重入函數(shù)遞歸調(diào)用
非重入函數(shù)不能被遞歸調(diào)用因?yàn)檫@樣會(huì)覆蓋函數(shù)的參數(shù)和局部數(shù)據(jù)如果需
要遞歸調(diào)用需聲明函數(shù)為可重入函數(shù)
267函數(shù)定義需要ANSI類(lèi)型的原型
一個(gè)函數(shù)被帶參數(shù)調(diào)用但是聲明是一個(gè)空的參數(shù)列表原型必須有完整的參
數(shù)類(lèi)型這樣編譯器就可能通過(guò)寄存器傳遞參數(shù)和適合應(yīng)用的調(diào)用機(jī)制
268任務(wù)定義錯(cuò)誤任務(wù)ID/優(yōu)先級(jí)/using
任務(wù)聲明錯(cuò)誤
271 asm/endasm控制放錯(cuò)地方
asm和endasm聲明不能嵌套endasm要求一個(gè)匯編塊前面用asm開(kāi)頭例如
#pragma asm
...
匯編指令
... #pragma endasm
272 asm要求激活SRC控制
在一個(gè)源文件中使用asm和endasm要求文件用SRC控制編譯那么編譯器就
會(huì)生成匯編源文件然后可以用A51匯編
273 asm/endasm在包含文件中不允許
在包含文件中不允許asm和endasm為了調(diào)試在包含文件不能有任何的可執(zhí)
行代碼
274非法的絕對(duì)標(biāo)識(shí)符
絕對(duì)地址標(biāo)識(shí)符對(duì)位目標(biāo)函數(shù)和局部函數(shù)不允許地址必須和目標(biāo)的存儲(chǔ)
空間一致例如下面的聲明是無(wú)效的因?yàn)殚g接尋址的范圍是0x00到0xFF
idata int _at_ 0x1000;
278常數(shù)太大
當(dāng)浮點(diǎn)參數(shù)超出32位的浮點(diǎn)值范圍就產(chǎn)生本錯(cuò)誤32位IEEE值的范圍是
±1.175494E-38到±3.402823E+38
279多次初始化
試圖多次初始化一個(gè)目標(biāo)
280沒(méi)有使用符號(hào)/標(biāo)號(hào)/參數(shù)
在一個(gè)函數(shù)中聲明了一個(gè)符號(hào)標(biāo)號(hào)或參數(shù)但沒(méi)有使用
281非指針類(lèi)型轉(zhuǎn)換為指針
引用的程序目標(biāo)不能轉(zhuǎn)換成一個(gè)指針
282不是一個(gè)SFR引用
本函數(shù)調(diào)用要求一個(gè)SFR作為參數(shù)
283asmparms參數(shù)不適合寄存器
參數(shù)不適合可用的CPU寄存器
284 <名稱>:在可覆蓋空間函數(shù)不再可重入
一個(gè)可重入函數(shù)包含對(duì)局部變量的明確的存儲(chǔ)類(lèi)型標(biāo)識(shí)符函數(shù)不再
完全可重入
300注釋未結(jié)束
一個(gè)注釋沒(méi)有一個(gè)結(jié)束符*/
301期望標(biāo)識(shí)符
一個(gè)預(yù)處理器命令期望一個(gè)標(biāo)識(shí)符
302誤用#操作符
字符操作符#沒(méi)有帶一個(gè)標(biāo)識(shí)符
303期望正式參數(shù)
字符操作符#沒(méi)有帶一個(gè)標(biāo)識(shí)符表示當(dāng)前所定義的宏的一個(gè)正式
參數(shù)名
304錯(cuò)誤的宏參數(shù)列表
宏參數(shù)列表沒(méi)有一個(gè)大括號(hào)逗號(hào)分開(kāi)的標(biāo)識(shí)符列表
305 string/char常數(shù)未結(jié)束
一個(gè)字符串活字符常數(shù)是無(wú)效的典型的后引號(hào)丟失
306宏調(diào)用未結(jié)束
預(yù)處理器在收集和擴(kuò)展一個(gè)宏調(diào)用的實(shí)際的參數(shù)時(shí)遇到輸入文件的結(jié)
尾
號(hào)錯(cuò)誤信息和說(shuō)明
307宏名稱參數(shù)計(jì)算不匹配
在一個(gè)宏調(diào)用中實(shí)際的參數(shù)數(shù)目和宏定義的參數(shù)數(shù)目不匹配本錯(cuò)
誤表示指定了太少的參數(shù)
308無(wú)效的整數(shù)常數(shù)表達(dá)式
一個(gè)if/elif命令的數(shù)學(xué)表達(dá)式包含一個(gè)語(yǔ)法錯(cuò)誤
309錯(cuò)誤或缺少文件名
在一個(gè)include命令中的文件名參數(shù)是無(wú)效的或沒(méi)有
310條件嵌套過(guò)多20
源文件包含太多的條件編譯嵌套命令最多允許20級(jí)嵌套
311 elif/else控制放錯(cuò)地方
312 endif控制放錯(cuò)地方
命令elif else和endif只有在if ifdef或ifndef命令中是合法的
313不能清除預(yù)定義的宏名稱
試圖清除一個(gè)預(yù)定義宏用戶定義的宏可以用#undef命令刪除預(yù)定
義的宏不能清除
314 #命令語(yǔ)法錯(cuò)誤
在一個(gè)預(yù)處理器命令中字符#必須跟一個(gè)新行或一個(gè)預(yù)處理器
命令名例如if/define/ifdef …
315未知的#命令名稱
預(yù)處理器命令是未知的
316條件未結(jié)束
到文件結(jié)尾endif的數(shù)目和if或ifdef的數(shù)目不匹配
318不能打開(kāi)文件文件名
指定的文件不能打開(kāi)
319文件不是一個(gè)磁盤(pán)文件
指定的文件不是一個(gè)磁盤(pán)文件文件不能編輯
320用戶自定義的內(nèi)容
本錯(cuò)誤號(hào)未預(yù)處理器的#error命令保留#error命令產(chǎn)生錯(cuò)誤號(hào)320
送出用戶定義的錯(cuò)誤內(nèi)容終止編譯器生成代碼
321缺少<字符>
在一個(gè)include命令的文件名參數(shù)中缺少結(jié)束符例如
#include 325正參名稱重復(fù) 一個(gè)宏的正參只能定義一次 326宏體不能以##開(kāi)始或結(jié)束 ##不能是一個(gè)宏體的開(kāi)始或結(jié)束 327宏宏名超過(guò)50個(gè)參數(shù) 每個(gè)宏的參數(shù)數(shù)目不能超過(guò)50 警告 警告產(chǎn)生潛在問(wèn)題的信息他們可能在目標(biāo)程序的運(yùn)行過(guò)程中出現(xiàn)警告不妨礙源文 件的編譯 警告在列表文件中生成信息警告信息用下面的格式 *** WARNINGnumberIN LINElineOFfile:warning message 這里 number錯(cuò)誤號(hào) line在源文件或包含文件中的對(duì)應(yīng)行號(hào) file錯(cuò)誤產(chǎn)生的源或包含文件名 warning message警告的內(nèi)容 下表按號(hào)列出了警告警告信息包括一個(gè)主要的內(nèi)容和可能的原因和糾正措施 號(hào)警告信息和說(shuō)明 173缺少返回表達(dá)式 一個(gè)函數(shù)返回一個(gè)除了int類(lèi)型以外的別的類(lèi)型的值必須包含一個(gè) 返回聲明包括一個(gè)表達(dá)式為了兼容舊的程序?qū)Ψ祷匾粋€(gè)int值 的函數(shù)不作檢查 182指針指向不同的目標(biāo) 一個(gè)指針關(guān)聯(lián)了一個(gè)不同類(lèi)型的地址 185不同的存儲(chǔ)空間 一個(gè)目標(biāo)聲明的存儲(chǔ)空間和前面聲明的同樣目標(biāo)的存儲(chǔ)空間不同 196存儲(chǔ)空間可能無(wú)效 把一個(gè)無(wú)效的常數(shù)值分配給一個(gè)指針無(wú)效的指針常數(shù)是long或 unsigned long編譯器對(duì)指針采用24位3字節(jié)低16位代表偏移 高8位代表選擇的存儲(chǔ)空間 198 sizeof返回零 一個(gè)目標(biāo)的大小計(jì)算結(jié)果為零如果目標(biāo)是外部的或如果一個(gè)數(shù)組 的維數(shù)沒(méi)有全知道則值是錯(cuò)誤的 號(hào)警告信息和說(shuō)明 206缺少函數(shù)原型 因?yàn)闆](méi)有原型聲明被調(diào)用的函數(shù)是未知的調(diào)用一個(gè)未知的函數(shù)通 常是危險(xiǎn)的參數(shù)的數(shù)目和實(shí)際要求不一樣如果是這種情況函數(shù) 調(diào)用不正確 沒(méi)有函數(shù)原型編譯器不能檢查參數(shù)的數(shù)目和類(lèi)型要避免這種警告 應(yīng)在程序中包含函數(shù)的原型 函數(shù)原型必須在函數(shù)被調(diào)用前聲明注意函數(shù)定義自動(dòng)生成原型 209實(shí)參太少 在一個(gè)函數(shù)調(diào)用中包含太少的實(shí)參 219 long常數(shù)被縮減為int 一個(gè)常數(shù)表達(dá)式的值必須能被一個(gè)int類(lèi)型所表示 245未知的pragma本行被忽略 #pragma聲明是未知的因此整行程序被忽略 258 struct/union成員的存儲(chǔ)空間方法 參數(shù)的存儲(chǔ)空間被忽略 一個(gè)結(jié)構(gòu)的成員或一個(gè)參數(shù)不能指定存儲(chǔ)類(lèi)型但是指針?biāo)傅哪?/p> 標(biāo)可以包含一個(gè)存儲(chǔ)類(lèi)型例如 struct vp{ char code c;int xdata i; }; 產(chǎn)生警告258 struct v1{ char c;int xdata *i; }; 對(duì)struct是正確的聲明 259指針不同的存儲(chǔ)空間 兩個(gè)要比較的指針沒(méi)有引用相同的存儲(chǔ)類(lèi)型的目標(biāo) 260指針折斷 把一個(gè)指針轉(zhuǎn)換為一個(gè)更小偏移區(qū)的指針轉(zhuǎn)換會(huì)完成但大指針的 偏移會(huì)折斷來(lái)適應(yīng)小指針 261 bit在重入函數(shù) 一個(gè)reentrant函數(shù)不能包含bit因?yàn)閎it標(biāo)量不能保存在虛擬堆棧中 265名稱對(duì)非重入函數(shù)遞歸調(diào)用 發(fā)現(xiàn)對(duì)一個(gè)非重入函數(shù)直接遞歸這可能是故意的但對(duì)每個(gè)獨(dú)立的 情況進(jìn)行功能性檢查通過(guò)生成的代碼間接遞歸由連接/定位器檢 查 號(hào)警告信息和說(shuō)明 271 asm/endams控制放錯(cuò)地方 asm和endasm不能嵌套endasm要求一個(gè)以asm聲明開(kāi)頭的匯編塊 例如 #pragma asm ... 匯編指令 ... #pragma endasm 275表達(dá)式可能無(wú)效 編譯器檢測(cè)到一個(gè)表達(dá)式不生成代碼例如 void test(void) { int i1,i2,i3; i1,i2,i3; /*死表達(dá)式*/ i1 << i3; /*結(jié)果未使用*/ } 276常數(shù)在條件表達(dá)式 編譯器檢測(cè)到一個(gè)條件表達(dá)式有一個(gè)常數(shù)值在大多數(shù)情況下是一個(gè) 輸入錯(cuò)誤例如 void test(void) { int i1,i2,i3; if( i1 = 1) i2 = 3; /*常數(shù)被賦值*/ while( i3 = 2); /*常數(shù)被賦值*/ } 277指針有不同的存儲(chǔ)空間 一個(gè)typedef聲明的存儲(chǔ)空間沖突例如 typedef char xdata XCC; /*存儲(chǔ)空間xdata */ typedef XCC idata PICC; /*存儲(chǔ)空間沖突*/ 280符號(hào)/標(biāo)號(hào)未使用 一個(gè)符號(hào)或標(biāo)號(hào)定義但未使用 307宏名稱參數(shù)計(jì)算不匹配 一個(gè)宏調(diào)用的實(shí)參的數(shù)目和宏定義的參數(shù)數(shù)目不匹配表示用了太多 的的參數(shù)過(guò)剩的參數(shù)被忽略 317宏名稱重新定義無(wú)效 一個(gè)預(yù)定義的宏不能重新定義或清除參考138頁(yè)的預(yù)定義宏常數(shù) 322未知的標(biāo)識(shí)符 在一個(gè)#if命令行的標(biāo)識(shí)符未定義等效為FALSE 323期望新行發(fā)現(xiàn)多余字符 一個(gè)#命令行正確但包含多余的非注釋字符例如 #include 324期望預(yù)處理器記號(hào) 期望一個(gè)預(yù)處理器記號(hào)但輸入的是一個(gè)新行例如#line這里缺 少#line命令的參數(shù)