小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C51中編譯錯誤信息

 冰劍穿心 2020-07-29
[導(dǎo)讀]致命錯誤致命錯誤立即終止編譯這些錯誤通常是命令行指定的無效選項的結(jié)果當(dāng)編譯器不能訪問一個特定的源包含文件時也產(chǎn)生致命錯誤致命錯誤信息采用下面的格式C51 FATAL-ERROR –ACTION :LINE: ERROR: C51 TERMIANTED.

致命錯誤

致命錯誤立即終止編譯這些錯誤通常是命令行指定的無效選項的結(jié)果當(dāng)編譯器不

能訪問一個特定的源包含文件時也產(chǎn)生致命錯誤

致命錯誤信息采用下面的格式

C51 FATAL-ERROR –

ACTION :

LINE:

ERROR:

C51 TERMIANTED.

C51 FATAL-ERROR –

ACTION:

FILE:

ERROR:

C51 TERMIANTED.

下面說明Action和Error中可能的內(nèi)容

Actions

ALLOCATING MEMORY

編譯器不能分配足夠的存儲區(qū)來編譯指定的源文件.

CREATING LIST-FILE/OBJECT-FILE/WORKFILE

編譯器不能建立列表文件,OBJ文件,或工作文件這個錯誤的出現(xiàn)可能是磁盤

滿或?qū)懕Wo,或文件已存在和只讀.

GENERATING INTERMEDIATE CODE

源文件包含的一個函數(shù)太大,不能被編譯器編譯成虛擬代碼.嘗試把函數(shù)分小或

重新編譯.

OPENING INPUT-FILE

編譯器不能發(fā)現(xiàn)或打開所選的源或包含文件.

PARSING INVOKE-/#PRAGMA-LINE

當(dāng)在命令行檢測到參數(shù)計算,或在一個#pragma中檢測到參數(shù)計算,就產(chǎn)生這樣

的錯誤.

PARSING SOURCE-FILE / ANALYZING DECLARATIONS

源文件包含太多的外部參考.減少源文件訪問的外部變量和函數(shù)的數(shù)目.

WRITING TO FILE

當(dāng)寫入列表文件,OBJ文件,或工作文件時遇到的錯誤.

Errors

‘(‘ AFTER CONTROL EXPECTED

一些控制參數(shù)需要用括號包含一個參數(shù).當(dāng)沒有左括號時顯示本信息.

‘)’ AFTER PARAMETER EXPECTED

本信息表示包含沒有參數(shù)的右括號.

BAD DIGIT IN NUMBER

一個控制參數(shù)的數(shù)字參數(shù)包含無效字符.只能是十進制數(shù).

CAN’T CREATE FILE

在FILE行定義的文件名不能建立.

CAN’T HAVE GERERAL CONTROL IN INVOCATION LINE

一般控制(例如EJECT)不能包含在命令行.把這些控制用#pragma聲明放在

源文件中.

FILE DOES NOT EXIST

沒有發(fā)現(xiàn)定義在FILE行的文件.

FILE WRITE-ERROR

因為磁盤空間不夠,寫到列表,預(yù)打印,工作,或目標文件時出錯.

IDENTIFIER EXPECTED

當(dāng)DEFINE控制沒有參數(shù)時產(chǎn)生本信息.DEFINE要求一個參數(shù)作為標識符.這

和C語言的規(guī)則相同.

MEMORY SPACE EXHAUSTED

編譯器不能分配足夠的存儲區(qū)來編譯指定的源文件.如果始終出現(xiàn)這個信息,應(yīng)

該把源文件分成兩個或多個小文件再重新編譯.

MORE THAN 100 ERRORS IN SOURCE-FILE

在編譯時檢測到的錯誤超過100個.這使編譯器終止.

MORE THAN 256 SEGMENTS/EXTERNALS

在一個源文件中的參考超過256.個單個的源文件不能有超過256個函數(shù)或外部參

考.這是INTEL目標模塊格式(OMF-51)的歷史的限制.包含標量和/或bit聲明

的函數(shù)在OBJ文件中生成兩個,有時候三個段定義

NON-NULL ARGUMENT EXPECTED

所選的控制參數(shù)需要用括號包含一個參數(shù)(例如,一個文件名或一個數(shù)字)

OUT OF RANGE NUMBER

一個控制參數(shù)的數(shù)字參數(shù)超出范圍.例如OPTIMIZE控制只允許數(shù)字0到6,值

7就將產(chǎn)生本錯誤信息.

PARSE STACK OVERFLOW

解析堆棧溢出.如果源程序包含很復(fù)雜的表達式或如果塊的嵌套深度超過31級,

就會出現(xiàn)這個錯誤

PREPROCESSOR: LINE TOO LONG( 32K)

一個中間擴展長度超過32K字符.

PREPROCESSOR: MACROS TOO NESTED

在宏擴展期間,預(yù)處理器所用的堆棧太大.這個信息通常表示一個遞歸的宏定義,

但也可表示一個宏嵌套太多.

RESPECIFIED OR CONFLICTING CONTROL

一個命令行參數(shù)指定了兩次,或命令行參數(shù)沖突.

SOURCE MUST COME FROM A DISK-FILE

源和包含文件必須存在.控制臺CON;,; CI;,或類似的設(shè)備不能作為輸入文件.

UNKNOWN CONTROL

所選的控制參數(shù)不認識.

語法和語義錯誤

語法和語義錯誤一般出現(xiàn)在源程序中.它們確定實際的編程錯誤.當(dāng)遇到這些錯誤時,

編譯器嘗試繞過錯誤繼續(xù)處理源文件.當(dāng)遇到更多的錯誤時,編譯器輸出另外的錯誤,

信息但是不產(chǎn)生OBJ文件.

語法和語義錯誤在列表文件中生成一條信息這些錯誤信息用下面的格式

*** ERRORnumberIN LINElineOFfile:error message

這里

number錯誤號

line對應(yīng)源文件或包含文件的行號

file產(chǎn)生錯誤的源或包含文件名

error message對錯誤的敘述說明

下表按錯誤號列出了語法和語義錯誤錯誤信息列出了主要說明和可能的原因和改正

號錯誤信息和說明

100跳過不可打印字符0x??

在源文件中發(fā)現(xiàn)一個非法字符.(注意不檢查注釋中的字符)

101字符串沒結(jié)束

一個字符串沒有用雙引號終止.

102字符串太長

一個字符串不能超過4096個字符用串聯(lián)符號在邏輯上可延長字符串

超過4096個字符這個模式的行終止符在詞匯分析時是連續(xù)的

103無效的字符常數(shù)

一個字符常數(shù)的格式無效符號c是無效的除非c是任何可打印的ASCII

字符

125聲明符太復(fù)雜20

一個目標的聲明可包含最多20個類型修飾符[ ] *這

個錯誤經(jīng)常伴隨著錯誤126

126類型堆棧下溢

類型聲明堆棧下溢這個錯誤通常死錯誤125的副產(chǎn)品

127無效存儲類

一個目標用一個無效的存儲空間標識符聲明如果一個目標在一個函數(shù)外用存

儲類auto或register聲明就會產(chǎn)生本錯誤

129在標記前缺少

本錯誤通常表示前一行缺少分號當(dāng)出現(xiàn)本錯誤時編譯器會產(chǎn)生很多錯誤信

130值超出范圍

在一個using或interrupt標識符后的數(shù)字參數(shù)是無效的using標識符要求一個0

到3之間的寄存器組號interrupt標識符要求一個0到31之間的中斷矢量號

131函數(shù)參數(shù)重復(fù)

一個函數(shù)有相同的參數(shù)名在函數(shù)聲明中參數(shù)名必須是唯一的

132沒在正式的參數(shù)列表

一個函數(shù)的參數(shù)聲明用了一個名稱沒在參數(shù)名列表中例如

char function(v0,v1,v2)

char *v0,*v1,*v5;

/* ‘v5’沒在正式列表中*/

{

/* … */

}

134函數(shù)的xdata/idata/pdata/data不允許

函數(shù)通常位于code存儲區(qū)不能在別的存儲區(qū)運行函數(shù)默認定義為存儲類型

code

135 bit的存儲類錯

bit標量的聲明可能包含一個static或extern存儲類register或alien類是無效的

136變量用了void

void類型只允許作為一個不存在的返回值或一個函數(shù)的空參數(shù)列表void

func(void)或和一個指針組合void *

138 Interrupt()不能接受或返回值

一個中斷函數(shù)被定義了一個或多個正式的參數(shù)或一個返回值中斷函數(shù)不能

包含調(diào)用參數(shù)或返回值

140位在非法的存儲空間

bit標量的定義可以包含可選的存儲類型data如果沒有存儲類型則默認為

data因為位通常在內(nèi)部數(shù)據(jù)存儲區(qū)當(dāng)試圖對一個bit標量定義別的數(shù)據(jù)類型

時會產(chǎn)生本錯誤

141臨近標志語法錯誤期待別的標志…

編譯器所見的標志是錯誤的參考所顯示的期待的內(nèi)容

142無效的基地址

一個sfr或sbit聲明的基地址是錯誤的有效的基地址范圍在0x80到0xFF之間

如果用符號基地址^位號聲明則基地址必須是8的倍數(shù)

143無效的絕對位地址

sbit聲明中的絕對位地址必須在0x80到0xFF之間

144基地址^位號無效的位號

sbit聲明中定義的位號必須在0到7之間

145未知的sfr

146無效sfr

一個絕對位基地址^位號的聲明包含一個無效的基地址標識符基地址必

須是已經(jīng)聲明的sfr任何別的名稱是無效的

147目標文件太大

單個目標文件不能超過65535 64K字節(jié)-1

149 struct/union包含函數(shù)成員

struct或union不能包含一個函數(shù)類型的成員但是指向函數(shù)的指針是可以的

150 struct/union包含一個bit成員

一個union不能包含bit類型成員這是8051的結(jié)構(gòu)決定的

151 struct/union自我關(guān)聯(lián)

一個結(jié)構(gòu)不能包含自己

152位號超出位域

位域聲明中指定的位號超過給定基類的位號

153命名的位域不能為零

命名的位域為零只要未命名的位域允許為零

154位域指針

指向位域的指針不允許

155位域要求char/int

位域的基類要求char或int unsigned char和unsigned int類型也行

156 alien只允許對函數(shù)

157 alien函數(shù)帶可變參數(shù)

存儲類alien只對外部PL/M-51函數(shù)允許符號char *,…在alien函數(shù)中是非

法的PL/M-51函數(shù)通常要求一個固定的參數(shù)表

158函數(shù)包含未命名的參數(shù)

一個函數(shù)的參數(shù)列表定義包含一個未命名的抽象類型定義這個符號只允許在

函數(shù)原型中

159 void后面帶類型

函數(shù)的原型聲明可包含一個空參數(shù)列表例如int func(void)在void后不

能再有類型定義

160 void無效

void類型只在和指針組合或作為一個函數(shù)的不存在的返回值中是合法的

161忽視了正式參數(shù)

在一個函數(shù)內(nèi)一個外部函數(shù)的聲明用了一個沒有類型標識符的參數(shù)名列表例

如extern yylex(a,b,c);

180不能指向一個函數(shù)

指向一個函數(shù)的類型是無效的嘗試用指針指向一個函數(shù)

181操作數(shù)不兼容

對給定的操作符至少一個操作數(shù)類型是無效的例如~float_type

183左值不能修改

要修改的目標位于code存儲區(qū)或有const屬性因此不能修改

184 sizeof非法操作數(shù)

sizeof操作符不能確定一個函數(shù)或位域的大小

185不同的存儲空間

一個目標聲明的存儲空間和前一個同樣目標聲明的存儲空間不同

186解除參照無效

一個內(nèi)部編譯器問題會產(chǎn)生本信息如果本錯誤重復(fù)出現(xiàn)請和技術(shù)支持接洽

187不是一個左值

所需的參數(shù)必須是一個可修改的目標地址

188未知目標大小

因為沒有一個數(shù)組的維數(shù)或間接通過一個void指針一個目標的大小不能計

189 &對bit/sfr非法

取地址符’&’不允許對bit目標或特殊函數(shù)寄存器sfr

190 &不是一個左值

嘗試建立一個指針指向一個未知目標

193非法操作類型

193對ptr非法add/sub
193對bit的非法操作

193錯誤操作數(shù)類型

當(dāng)對一個給定的操作符用了非法的操作數(shù)類型時產(chǎn)生本錯誤例如無效的表

達式如bit*bitptr+ptr或ptr*anything這個錯誤信息包括引起錯誤的操作

下面的操作對bit類型的操作數(shù)是可行的

??賦值=

??OR/復(fù)合OR ||=

??AND/復(fù)合AND& &=

??XOR/復(fù)合XOR^ ^=

??bit比較= = !=

??取反~

bit操作數(shù)可和別的數(shù)據(jù)類型在表達式中混用在這種情況類型轉(zhuǎn)換自動執(zhí)行

194 *間接指向一個未知大小的目標

間接操作符*不能和void指針合用因為指針所指的目標的大小是未知的

195 *間接非法

*操作符不能用到非指針參數(shù)

196存儲空間可能無效

轉(zhuǎn)換一個常數(shù)到一個指針常數(shù)產(chǎn)生一個無效的存儲空間例如char

*p=0x91234

198 sizeof返回零

sizeof操作符返回一個零

199 ->’的左邊要求struct/union指針

->操作符的左邊參數(shù)必須是一個struct指針或一個union指針

200 .左邊要求struct/union

.操作符的左邊參數(shù)要求必須是struct或union類型

201未定義的struct/union

給定的struct或union名是未知的

202未定義的標識符

給定的標識符是未定義的

203錯誤的存儲類參考名

本錯誤表示編譯器的一個問題如果重復(fù)出現(xiàn)請接洽技術(shù)支持

204未定義的成員

給定的一個struct或union成員名是未定義的

205不能調(diào)用一個中斷函數(shù)

一個中斷函數(shù)不能象一個正常函數(shù)一樣調(diào)用中斷的入口和退出代碼是特殊

207參數(shù)列表聲明為void

參數(shù)列表聲明為void的函數(shù)不能從調(diào)用者接收參數(shù)

208太多的實參

函數(shù)調(diào)用包含太多的實參

209太少的實參

調(diào)用函數(shù)包含太少的實參

210太多的嵌套調(diào)用

函數(shù)的嵌套調(diào)用不能超過10級

211調(diào)用不是對一個函數(shù)

一個函數(shù)的調(diào)用項不是對一個函數(shù)或函數(shù)指針求值

212間接調(diào)用寄存器的參數(shù)不匹配

通過一個指針的間接函數(shù)調(diào)用不包含實際的參數(shù)一個例外是當(dāng)所有的參數(shù)可

以通過寄存器傳遞這是由于Cx51所用的傳遞參數(shù)的方法被調(diào)用的函數(shù)名

必須是已知的因為參數(shù)寫到被調(diào)用函數(shù)的數(shù)據(jù)段但是對間接調(diào)用來說

被調(diào)用函數(shù)的名稱是未知的

213賦值符的左邊不是一個左值

賦值符的左邊要求一個可修改目標的地址

214非法指針轉(zhuǎn)換

bit float或集合類型的目標不能轉(zhuǎn)換為指針

215非法類型轉(zhuǎn)換

struct/union/void不能轉(zhuǎn)換為任何別的類型

216標號用在非數(shù)組中或維數(shù)超出

一個數(shù)組引用包含太大的維數(shù)或目標不是一個數(shù)組

217非整數(shù)索引

一個數(shù)組的維數(shù)表達式必須是char unsigned char int或unsigned int類型

別的類型都是非法的

218控制表達式用了void類型

在一個while for或do的限制表達式中不能用類型void

219 long常數(shù)縮減為int

一個常數(shù)表達式的值必須能用一個int類型表示

220非法常數(shù)表達式

期望一個常數(shù)表達式目標名變量或函數(shù)不允許出現(xiàn)在常數(shù)表達式中

221非常數(shù)case/dim表達式

一個case或一個維數(shù)[ ]必須是一個常數(shù)表達式

222被零除

223被零取模

編譯器檢測到一個被零除或取模

225表達式太復(fù)雜需簡化

一個表達式太復(fù)雜必須分成兩個或多個子表達式

226重復(fù)的struct/union/enum標記

一個struct union或enum名早已定義

227表示一個union標記

一個union名稱早已定義為別的類型

228表示一個struct標記

一個struct名早已定義為別的類型

229表示一個enum標記

一個enum名早已定義為別的類型

230未知的struct/union/enum標記

指定的struct union或enum名未定義

231重復(fù)定義

指定的名稱已被定義

232重復(fù)標號

指定的標號已定義

233未定義標號

表示一個標號未定義有時候這個信息會在實際的標號的幾行后出現(xiàn)這是所

用的未定義標號的搜索方法引起的

234 {堆棧范圍溢出31

超過了最多31個嵌套塊超出的嵌套塊被忽略

235參數(shù)<數(shù)字>不同類型

函數(shù)聲明的參數(shù)類型和函數(shù)原型中的不同

236參數(shù)列表的長度不同

函數(shù)聲明中的參數(shù)數(shù)目和函數(shù)原型中的不同

237函數(shù)早已定義

試圖聲明一個函數(shù)體兩次

238重復(fù)成員

239重復(fù)參數(shù)

試圖定義一個已存在的struct成員或函數(shù)參數(shù)

240超出128個局部bit

在一個函數(shù)內(nèi)不能超過128個bit標量

241 auto段太大

局部目標所需的空間超過模式的極限最大的段大小定義如下

SMALL128字節(jié)

COMPACT256字節(jié)

LARGE65535字節(jié)

242太多的初始化軟件

初始化軟件的數(shù)目超過初始化目標的數(shù)量

243字符串超出范圍

字符串中的字符數(shù)目超出字符串初始化的數(shù)目

244不能初始化錯誤的類型或類

試圖初始化一個bit或sfr

245未知的pragma跳過本行

#pragma狀態(tài)未知所以整行被忽略

246浮點錯誤

當(dāng)一個浮點參數(shù)超出32位的范圍就產(chǎn)生本錯誤32位IEEE值的范圍是

±1.175494E-38到±3.402823E+38

247非地址/常數(shù)初始化

一個有效的初始化表達式必須是一個常數(shù)值求值或一個目標名加或減去一個常

數(shù)

248集合初始化需要大括號

給定struct或union初始化缺少大括號{}

249段<名>段太大

編譯器檢測到一個數(shù)據(jù)段太大一個數(shù)據(jù)段的最大的大小由存儲空間決定

250 esc值超過255

一個字符串常數(shù)中的轉(zhuǎn)義序列超過有效值范圍最大值是255

252非法八進制數(shù)

指定的字符不是一個有效的八進制數(shù)

252主要控制放錯地方行被忽略

主要控制必須被指定在C模塊的開頭在任何#include命令或聲明前

253內(nèi)部錯誤ASMGENCLASS

在下列情況下出現(xiàn)本錯誤

??一個內(nèi)在函數(shù)例如_testbit_被錯誤激活這種情況是在沒有函數(shù)原

型存在和實參數(shù)目或類型錯誤對這種原因必須使用合適的聲明文件

INTRINS.H STRING.H參考第八章中的instrinsic函數(shù)

??Cx51確認一個內(nèi)部一致性問題請接洽技術(shù)支持

255 switch表達式有非法類型

在一個switch表達式?jīng)]有合法的數(shù)據(jù)類型

256存儲模式?jīng)_突

一個包含alien屬性的函數(shù)只能包含模式標識符small函數(shù)的參數(shù)必須位于內(nèi)

部數(shù)據(jù)區(qū)這適用于所有的外部alien聲明和alien函數(shù)例如

alien plm_func(char c) large {…}

產(chǎn)生錯誤256

257 alien函數(shù)不能重入

一個包含alien屬性的函數(shù)不能同時包含reentrant屬性函數(shù)參數(shù)不能跳過虛擬

堆棧傳遞這適用于所有的外部alien聲明和alien函數(shù)

258 struct/union成員的存儲空間非法

非法空間的參數(shù)被忽略

一個結(jié)構(gòu)的成員或參數(shù)不能包含一個存儲類型標識符但指針所指的目標可

能包含一個存儲類型例如

struct vp{char code c;int xdata i; };

產(chǎn)生錯誤258

struct v1{char c;int xdata *i; };

是正確的struct聲明

259指針不同的存儲空間

一個空指針被關(guān)聯(lián)到別的不同存儲空間的空指針例如

char xdata *p1;

char idata *p2;

p1 = p2; /*不同的存儲空間*/

260指針斷開

一個空指針被關(guān)聯(lián)到一些常數(shù)值這些值超過了指針存儲空間的值范圍例如

char idata *p1 = 0x1234; /*結(jié)果是0x34 */

261 reentrant()內(nèi)有bit

一個可重入屬性的函數(shù)的聲明中不能包含bit目標例如

int func1(int i1) reentrant {

bit b1,b2; /*不允許*/

return(i1-1);

}

262 using/disable不能返回bit值

用using屬性聲明的函數(shù)和禁止中斷#pragma disable的函數(shù)不能返回一個bit

值給調(diào)用者例如

bit test(void) using 3

{

bit b0;

return(b0);

}

產(chǎn)生錯誤262

263保存/恢復(fù)堆棧保存溢出/下溢

#pragma save的最大嵌套深度是八級堆棧的pragma save和restore工作根據(jù)

LIFO后進先出規(guī)則

264內(nèi)在的<內(nèi)在的名稱>聲明/激活錯誤

本錯誤表示一個內(nèi)在的函數(shù)錯誤定義參數(shù)數(shù)目或省略號如果用標準的.H

文件就不會產(chǎn)生本錯誤確認使用了Cx51所有的.H文件不要嘗試對內(nèi)在的

庫函數(shù)定義自己的原型

265對非重入函數(shù)遞歸調(diào)用

非重入函數(shù)不能被遞歸調(diào)用因為這樣會覆蓋函數(shù)的參數(shù)和局部數(shù)據(jù)如果需

要遞歸調(diào)用需聲明函數(shù)為可重入函數(shù)

267函數(shù)定義需要ANSI類型的原型

一個函數(shù)被帶參數(shù)調(diào)用但是聲明是一個空的參數(shù)列表原型必須有完整的參

數(shù)類型這樣編譯器就可能通過寄存器傳遞參數(shù)和適合應(yīng)用的調(diào)用機制

268任務(wù)定義錯誤任務(wù)ID/優(yōu)先級/using

任務(wù)聲明錯誤

271 asm/endasm控制放錯地方

asm和endasm聲明不能嵌套endasm要求一個匯編塊前面用asm開頭例如

#pragma asm

...

匯編指令

... #pragma endasm

272 asm要求激活SRC控制

在一個源文件中使用asm和endasm要求文件用SRC控制編譯那么編譯器就

會生成匯編源文件然后可以用A51匯編

273 asm/endasm在包含文件中不允許

在包含文件中不允許asm和endasm為了調(diào)試在包含文件不能有任何的可執(zhí)

行代碼

274非法的絕對標識符

絕對地址標識符對位目標函數(shù)和局部函數(shù)不允許地址必須和目標的存儲

空間一致例如下面的聲明是無效的因為間接尋址的范圍是0x00到0xFF

idata int _at_ 0x1000;

278常數(shù)太大

當(dāng)浮點參數(shù)超出32位的浮點值范圍就產(chǎn)生本錯誤32位IEEE值的范圍是

±1.175494E-38到±3.402823E+38

279多次初始化

試圖多次初始化一個目標

280沒有使用符號/標號/參數(shù)

在一個函數(shù)中聲明了一個符號標號或參數(shù)但沒有使用

281非指針類型轉(zhuǎn)換為指針

引用的程序目標不能轉(zhuǎn)換成一個指針

282不是一個SFR引用

本函數(shù)調(diào)用要求一個SFR作為參數(shù)

283asmparms參數(shù)不適合寄存器

參數(shù)不適合可用的CPU寄存器

284 <名稱>:在可覆蓋空間函數(shù)不再可重入

一個可重入函數(shù)包含對局部變量的明確的存儲類型標識符函數(shù)不再

完全可重入

300注釋未結(jié)束

一個注釋沒有一個結(jié)束符*/

301期望標識符

一個預(yù)處理器命令期望一個標識符

302誤用#操作符

字符操作符#沒有帶一個標識符

303期望正式參數(shù)

字符操作符#沒有帶一個標識符表示當(dāng)前所定義的宏的一個正式

參數(shù)名

304錯誤的宏參數(shù)列表

宏參數(shù)列表沒有一個大括號逗號分開的標識符列表

305 string/char常數(shù)未結(jié)束

一個字符串活字符常數(shù)是無效的典型的后引號丟失

306宏調(diào)用未結(jié)束

預(yù)處理器在收集和擴展一個宏調(diào)用的實際的參數(shù)時遇到輸入文件的結(jié)

號錯誤信息和說明

307宏名稱參數(shù)計算不匹配

在一個宏調(diào)用中實際的參數(shù)數(shù)目和宏定義的參數(shù)數(shù)目不匹配本錯

誤表示指定了太少的參數(shù)

308無效的整數(shù)常數(shù)表達式

一個if/elif命令的數(shù)學(xué)表達式包含一個語法錯誤

309錯誤或缺少文件名

在一個include命令中的文件名參數(shù)是無效的或沒有

310條件嵌套過多20

源文件包含太多的條件編譯嵌套命令最多允許20級嵌套

311 elif/else控制放錯地方

312 endif控制放錯地方

命令elif else和endif只有在if ifdef或ifndef命令中是合法的

313不能清除預(yù)定義的宏名稱

試圖清除一個預(yù)定義宏用戶定義的宏可以用#undef命令刪除預(yù)定

義的宏不能清除

314 #命令語法錯誤

在一個預(yù)處理器命令中字符#必須跟一個新行或一個預(yù)處理器

命令名例如if/define/ifdef …

315未知的#命令名稱

預(yù)處理器命令是未知的

316條件未結(jié)束

到文件結(jié)尾endif的數(shù)目和if或ifdef的數(shù)目不匹配

318不能打開文件文件名

指定的文件不能打開

319文件不是一個磁盤文件

指定的文件不是一個磁盤文件文件不能編輯

320用戶自定義的內(nèi)容

本錯誤號未預(yù)處理器的#error命令保留#error命令產(chǎn)生錯誤號320

送出用戶定義的錯誤內(nèi)容終止編譯器生成代碼

321缺少<字符>

在一個include命令的文件名參數(shù)中缺少結(jié)束符例如

#include<stdio.h< p="">

325正參名稱重復(fù)

一個宏的正參只能定義一次

326宏體不能以##開始或結(jié)束

##不能是一個宏體的開始或結(jié)束

327宏宏名超過50個參數(shù)

每個宏的參數(shù)數(shù)目不能超過50

警告

警告產(chǎn)生潛在問題的信息他們可能在目標程序的運行過程中出現(xiàn)警告不妨礙源文

件的編譯

警告在列表文件中生成信息警告信息用下面的格式

*** WARNINGnumberIN LINElineOFfile:warning message

這里

number錯誤號

line在源文件或包含文件中的對應(yīng)行號

file錯誤產(chǎn)生的源或包含文件名

warning message警告的內(nèi)容

下表按號列出了警告警告信息包括一個主要的內(nèi)容和可能的原因和糾正措施

號警告信息和說明

173缺少返回表達式

一個函數(shù)返回一個除了int類型以外的別的類型的值必須包含一個

返回聲明包括一個表達式為了兼容舊的程序?qū)Ψ祷匾粋€int值

的函數(shù)不作檢查

182指針指向不同的目標

一個指針關(guān)聯(lián)了一個不同類型的地址

185不同的存儲空間

一個目標聲明的存儲空間和前面聲明的同樣目標的存儲空間不同

196存儲空間可能無效

把一個無效的常數(shù)值分配給一個指針無效的指針常數(shù)是long或

unsigned long編譯器對指針采用24位3字節(jié)低16位代表偏移

高8位代表選擇的存儲空間

198 sizeof返回零

一個目標的大小計算結(jié)果為零如果目標是外部的或如果一個數(shù)組

的維數(shù)沒有全知道則值是錯誤的

號警告信息和說明

206缺少函數(shù)原型

因為沒有原型聲明被調(diào)用的函數(shù)是未知的調(diào)用一個未知的函數(shù)通

常是危險的參數(shù)的數(shù)目和實際要求不一樣如果是這種情況函數(shù)

調(diào)用不正確

沒有函數(shù)原型編譯器不能檢查參數(shù)的數(shù)目和類型要避免這種警告

應(yīng)在程序中包含函數(shù)的原型

函數(shù)原型必須在函數(shù)被調(diào)用前聲明注意函數(shù)定義自動生成原型

209實參太少

在一個函數(shù)調(diào)用中包含太少的實參

219 long常數(shù)被縮減為int

一個常數(shù)表達式的值必須能被一個int類型所表示

245未知的pragma本行被忽略

#pragma聲明是未知的因此整行程序被忽略

258 struct/union成員的存儲空間方法

參數(shù)的存儲空間被忽略

一個結(jié)構(gòu)的成員或一個參數(shù)不能指定存儲類型但是指針所指的目

標可以包含一個存儲類型例如

struct vp{ char code c;int xdata i; };

產(chǎn)生警告258

struct v1{ char c;int xdata *i; };

對struct是正確的聲明

259指針不同的存儲空間

兩個要比較的指針沒有引用相同的存儲類型的目標

260指針折斷

把一個指針轉(zhuǎn)換為一個更小偏移區(qū)的指針轉(zhuǎn)換會完成但大指針的

偏移會折斷來適應(yīng)小指針

261 bit在重入函數(shù)

一個reentrant函數(shù)不能包含bit因為bit標量不能保存在虛擬堆棧中

265名稱對非重入函數(shù)遞歸調(diào)用

發(fā)現(xiàn)對一個非重入函數(shù)直接遞歸這可能是故意的但對每個獨立的

情況進行功能性檢查通過生成的代碼間接遞歸由連接/定位器檢

號警告信息和說明

271 asm/endams控制放錯地方

asm和endasm不能嵌套endasm要求一個以asm聲明開頭的匯編塊

例如

#pragma asm

...

匯編指令

...

#pragma endasm

275表達式可能無效

編譯器檢測到一個表達式不生成代碼例如

void test(void) {

int i1,i2,i3;

i1,i2,i3; /*死表達式*/

i1 << i3; /*結(jié)果未使用*/

}

276常數(shù)在條件表達式

編譯器檢測到一個條件表達式有一個常數(shù)值在大多數(shù)情況下是一個

輸入錯誤例如

void test(void) {

int i1,i2,i3;

if( i1 = 1) i2 = 3; /*常數(shù)被賦值*/

while( i3 = 2); /*常數(shù)被賦值*/

}

277指針有不同的存儲空間

一個typedef聲明的存儲空間沖突例如

typedef char xdata XCC; /*存儲空間xdata */

typedef XCC idata PICC; /*存儲空間沖突*/

280符號/標號未使用

一個符號或標號定義但未使用

307宏名稱參數(shù)計算不匹配

一個宏調(diào)用的實參的數(shù)目和宏定義的參數(shù)數(shù)目不匹配表示用了太多

的的參數(shù)過剩的參數(shù)被忽略

317宏名稱重新定義無效

一個預(yù)定義的宏不能重新定義或清除參考138頁的預(yù)定義宏常數(shù)

322未知的標識符

在一個#if命令行的標識符未定義等效為FALSE

323期望新行發(fā)現(xiàn)多余字符

一個#命令行正確但包含多余的非注釋字符例如

#include foo

324期望預(yù)處理器記號

期望一個預(yù)處理器記號但輸入的是一個新行例如#line這里缺

少#line命令的參數(shù)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多