keil编译错误集.docx
- 文档编号:26766105
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:15
- 大小:25.12KB
keil编译错误集.docx
《keil编译错误集.docx》由会员分享,可在线阅读,更多相关《keil编译错误集.docx(15页珍藏版)》请在冰豆网上搜索。
keil编译错误集
keil编译错误集
2009-06-0300:
33
致命错误
致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不
能访问一个特定的源包含文件时也产生致命错误
致命错误信息采用下面的格式
C51FATAL-ERROR–
ACTION:
LINE:
ERROR:
C51TERMIANTED.
C51FATAL-ERROR–
ACTION:
FILE:
ERROR:
C51TERMIANTED.
下面说明Action和Error中可能的内容
Actions
ALLOCATINGMEMORY
编译器不能分配足够的存储区来编译指定的源文件.
CREATINGLIST-FILE/OBJECT-FILE/WORKFILE
编译器不能建立列表文件,OBJ文件,或工作文件这个错误的出现可能是磁盘
满或写保护,或文件已存在和只读.
GENERATINGINTERMEDIATECODE
源文件包含的一个函数太大,不能被编译器编译成虚拟代码.尝试把函数分小或
重新编译.
OPENINGINPUT-FILE
编译器不能发现或打开所选的源或包含文件.
PARSINGINVOKE-/#PRAGMA-LINE
当在命令行检测到参数计算,或在一个#pragma中检测到参数计算,就产生这样
的错误.
PARSINGSOURCE-FILE/ANALYZINGDECLARATIONS
源文件包含太多的外部参考.减少源文件访问的外部变量和函数的数目.
WRITINGTOFILE
当写入列表文件,OBJ文件,或工作文件时遇到的错误.
Errors
‘(‘AFTERCONTROLEXPECTED
一些控制参数需要用括号包含一个参数.当没有左括号时显示本信息.
‘)’AFTERPARAMETEREXPECTED
本信息表示包含没有参数的右括号.
BADDIGITINNUMBER
一个控制参数的数字参数包含无效字符.只能是十进制数.
CAN’TCREATEFILE
在FILE行定义的文件名不能建立.
CAN’THAVEGERERALCONTROLININVOCATIONLINE
一般控制(例如EJECT)不能包含在命令行.把这些控制用#pragma声明放在
源文件中.
FILEDOESNOTEXIST
没有发现定义在FILE行的文件.
FILEWRITE-ERROR
因为磁盘空间不够,写到列表,预打印,工作,或目标文件时出错.
IDENTIFIEREXPECTED
当DEFINE控制没有参数时产生本信息.DEFINE要求一个参数作为标识符.这
和C语言的规则相同.
MEMORYSPACEEXHAUSTED
编译器不能分配足够的存储区来编译指定的源文件.如果始终出现这个信息,应
该把源文件分成两个或多个小文件再重新编译.
MORETHAN100ERRORSINSOURCE-FILE
在编译时检测到的错误超过100个.这使编译器终止.
MORETHAN256SEGMENTS/EXTERNALS
在一个源文件中的参考超过256.个单个的源文件不能有超过256个函数或外部参
考.这是INTEL目标模块格式(OMF-51)的历史的限制.包含标量和/或bit声明
的函数在OBJ文件中生成两个,有时候三个段定义
NON-NULLARGUMENTEXPECTED
所选的控制参数需要用括号包含一个参数(例如,一个文件名或一个数字)
OUTOFRANGENUMBER
一个控制参数的数字参数超出范围.例如OPTIMIZE控制只允许数字0到6,值
7就将产生本错误信息.
PARSESTACKOVERFLOW
解析堆栈溢出.如果源程序包含很复杂的表达式或如果块的嵌套深度超过31级,
就会出现这个错误
PREPROCESSOR:
LINETOOLONG(32K)
一个中间扩展长度超过32K字符.
PREPROCESSOR:
MACROSTOONESTED
在宏扩展期间,预处理器所用的堆栈太大.这个信息通常表示一个递归的宏定义,
但也可表示一个宏嵌套太多.
RESPECIFIEDORCONFLICTINGCONTROL
一个命令行参数指定了两次,或命令行参数冲突.
SOURCEMUSTCOMEFROMADISK-FILE
源和包含文件必须存在.控制台CON;,;CI;,或类似的设备不能作为输入文件.
UNKNOWNCONTROL
所选的控制参数不认识.
语法和语义错误
语法和语义错误一般出现在源程序中.它们确定实际的编程错误.当遇到这些错误时,
编译器尝试绕过错误继续处理源文件.当遇到更多的错误时,编译器输出另外的错误,
信息但是不产生OBJ文件.
语法和语义错误在列表文件中生成一条信息这些错误信息用下面的格式
***ERRORnumberINLINElineOFfile:
errormessage
这里
number 错误号
line 对应源文件或包含文件的行号
file 产生错误的源或包含文件名
errormessage对错误的叙述说明
下表按错误号列出了语法和语义错误错误信息列出了主要说明和可能的原因和改正
号错误信息和说明
100跳过不可打印字符0x?
?
在源文件中发现一个非法字符.(注意不检查注释中的字符)
101字符串没结束
一个字符串没有用双引号终止.
102字符串太长
一个字符串不能超过4096个字符用串联符号\在逻辑上可延长字符串
超过4096个字符这个模式的行终止符在词汇分析时是连续的
103无效的字符常数
一个字符常数的格式无效符号\c是无效的除非c是任何可打印的ASCII
字符
125声明符太复杂20
一个目标的声明可包含最多20个类型修饰符[]*这
个错误经常伴随着错误126
126类型堆栈下溢
类型声明堆栈下溢这个错误通常死错误125的副产品
127无效存储类
一个目标用一个无效的存储空间标识符声明如果一个目标在一个函数外用存
储类auto或register声明就会产生本错误
129在标记前缺少
本错误通常表示前一行缺少分号当出现本错误时编译器会产生很多错误信
息
130值超出范围
在一个using或interrupt标识符后的数字参数是无效的using标识符要求一个0
到3之间的寄存器组号interrupt标识符要求一个0到31之间的中断矢量号
131函数参数重复
一个函数有相同的参数名在函数声明中参数名必须是唯一的
132没在正式的参数列表
一个函数的参数声明用了一个名称没在参数名列表中例如
charfunction(v0,v1,v2)
char*v0,*v1,*v5;
/*‘v5’没在正式列表中*/
{
/*…*/
}
134函数的xdata/idata/pdata/data不允许
函数通常位于code存储区不能在别的存储区运行函数默认定义为存储类型
code
135bit的存储类错
bit标量的声明可能包含一个static或extern存储类register或alien类是无效的
136变量用了void
void类型只允许作为一个不存在的返回值或一个函数的空参数列表void
func(void)或和一个指针组合void*
138Interrupt()不能接受或返回值
一个中断函数被定义了一个或多个正式的参数或一个返回值中断函数不能
包含调用参数或返回值
140位在非法的存储空间
bit标量的定义可以包含可选的存储类型data如果没有存储类型则默认为
data因为位通常在内部数据存储区当试图对一个bit标量定义别的数据类型
时会产生本错误
141临近标志语法错误期待别的标志…
编译器所见的标志是错误的参考所显示的期待的内容
142无效的基位置
一个sfr或sbit声明的基位置是错误的有效的基位置范围在0x80到0xFF之间
如果用符号基位置^位号声明则基位置必须是8的倍数
143无效的绝对位位置
sbit声明中的绝对位位置必须在0x80到0xFF之间
144基位置^位号无效的位号
sbit声明中定义的位号必须在0到7之间
145未知的sfr
146无效sfr
一个绝对位基位置^位号的声明包含一个无效的基位置标识符基位置必
须是已经声明的sfr任何别的名称是无效的
147目标文件太大
单个目标文件不能超过6553564K字节-1
149struct/union包含函数成员
struct或union不能包含一个函数类型的成员但是指向函数的指针是可以的
150struct/union包含一个bit成员
一个union不能包含bit类型成员这是8051的结构决定的
151struct/union自我关联
一个结构不能包含自己
152位号超出位域
位域声明中指定的位号超过给定基类的位号
153命名的位域不能为零
命名的位域为零只要未命名的位域允许为零
154位域指针
指向位域的指针不允许
155位域要求char/int
位域的基类要求char或intunsignedchar和unsignedint类型也行
156alien只允许对函数
157alien函数带可变参数
存储类alien只对外部PL/M-51函数允许符号char*,…在alien函数中是非
法的PL/M-51函数通常要求一个固定的参数表
158函数包含未命名的参数
一个函数的参数列表定义包含一个未命名的抽象类型定义这个符号只允许在
函数原型中
159void后面带类型
函数的原型声明可包含一个空参数列表例如intfunc(void)在void后不
能再有类型定义
160void无效
void类型只在和指针组合或作为一个函数的不存在的返回值中是合法的
161忽视了正式参数
在一个函数内一个外部函数的声明用了一个没有类型标识符的参数名列表例
如externyylex(a,b,c);
180不能指向一个函数
指向一个函数的类型是无效的尝试用指针指向一个函数
181操作数不兼容
对给定的操作符至少一个操作数类型是无效的例如~float_type
183左值不能修改
要修改的目标位于code存储区或有const属性因此不能修改
184sizeof非法操作数
sizeof操作符不能确定一个函数或位域的大小
185不同的存储空间
一个目标声明的存储空间和前一个同样目标声明的存储空间不同
186解除参照无效
一个内部编译器问题会产生本信息如果本错误重复出现请和技术支持接洽
187不是一个左值
所需的参数必须是一个可修改的目标位置
188未知目标大小
因为没有一个数组的维数或间接通过一个void指针一个目标的大小不能计
算
189&对bit/sfr非法
取位置符’&’不允许对bit目标或特殊函数寄存器sfr
190&不是一个左值
尝试建立一个指针指向一个未知目标
193非法操作类型
193对ptr非法add/sub
193对bit的非法操作
193错误操作数类型
当对一个给定的操作符用了非法的操作数类型时产生本错误例如无效的表
达式如bit*bitptr+ptr或ptr*anything这个错误信息包括引起错误的操作
符
下面的操作对bit类型的操作数是可行的
赋值=
OR/复合OR||=
AND/复合AND&&=
XOR/复合XOR^^=
bit比较==!
=
取反~
bit操作数可和别的数据类型在表达式中混用在这种情况类型转换自动执行
194*间接指向一个未知大小的目标
间接操作符*不能和void指针合用因为指针所指的目标的大小是未知的
195*间接非法
*操作符不能用到非指针参数
196存储空间可能无效
转换一个常数到一个指针常数产生一个无效的存储空间例如char
*p=0x91234
198sizeof返回零
sizeof操作符返回一个零
199->’的左边要求struct/union指针
->操作符的左边参数必须是一个struct指针或一个union指针
200.左边要求struct/union
.操作符的左边参数要求必须是struct或union类型
201未定义的struct/union
给定的struct或union名是未知的
202未定义的标识符
给定的标识符是未定义的
203错误的存储类参考名
本错误表示编译器的一个问题如果重复出现请接洽技术支持
204未定义的成员
给定的一个struct或union成员名是未定义的
205不能调用一个中断函数
一个中断函数不能象一个正常函数一样调用中断的入口和退出代码是特殊
的
207参数列表声明为void
参数列表声明为void的函数不能从调用者接收参数
208太多的实参
函数调用包含太多的实参
209太少的实参
调用函数包含太少的实参
210太多的嵌套调用
函数的嵌套调用不能超过10级
211调用不是对一个函数
一个函数的调用项不是对一个函数或函数指针求值
212间接调用寄存器的参数不匹配
通过一个指针的间接函数调用不包含实际的参数一个例外是当所有的参数可
以通过寄存器传递这是由于Cx51所用的传递参数的方法被调用的函数名
必须是已知的因为参数写到被调用函数的数据段但是对间接调用来说
被调用函数的名称是未知的
213赋值符的左边不是一个左值
赋值符的左边要求一个可修改目标的位置
214非法指针转换
bitfloat或集合类型的目标不能转换为指针
215非法类型转换
struct/union/void不能转换为任何别的类型
216标号用在非数组中或维数超出
一个数组引用包含太大的维数或目标不是一个数组
217非整数索引
一个数组的维数表达式必须是charunsignedcharint或unsignedint类型
别的类型都是非法的
218控制表达式用了void类型
在一个whilefor或do的限制表达式中不能用类型void
219long常数缩减为int
一个常数表达式的值必须能用一个int类型表示
220非法常数表达式
期望一个常数表达式目标名变量或函数不允许出现在常数表达式中
221非常数case/dim表达式
一个case或一个维数[]必须是一个常数表达式
222被零除
223被零取模
编译器检测到一个被零除或取模
225表达式太复杂需简化
一个表达式太复杂必须分成两个或多个子表达式
226重复的struct/union/enum标记
一个structunion或enum名早已定义
227表示一个union标记
一个union名称早已定义为别的类型
228表示一个struct标记
一个struct名早已定义为别的类型
229表示一个enum标记
一个enum名早已定义为别的类型
230未知的struct/union/enum标记
指定的structunion或enum名未定义
231重复定义
指定的名称已被定义
232重复标号
指定的标号已定义
233未定义标号
表示一个标号未定义有时候这个信息会在实际的标号的几行后出现这是所
用的未定义标号的搜索方法引起的
234{堆栈范围溢出31
超过了最多31个嵌套块超出的嵌套块被忽略
235参数<数字>不同类型
函数声明的参数类型和函数原型中的不同
236参数列表的长度不同
函数声明中的参数数目和函数原型中的不同
237函数早已定义
试图声明一个函数体两次
238重复成员
239重复参数
试图定义一个已存在的struct成员或函数参数
240超出128个局部bit
在一个函数内不能超过128个bit标量
241auto段太大
局部目标所需的空间超过模式的极限最大的段大小定义如下
SMALL128字节
COMPACT256字节
LARGE65535字节
242太多的初始化软件
初始化软件的数目超过初始化目标的数量
243字符串超出范围
字符串中的字符数目超出字符串初始化的数目
244不能初始化错误的类型或类
试图初始化一个bit或sfr
245未知的pragma跳过本行
#pragma状态未知所以整行被忽略
246浮点错误
当一个浮点参数超出32位的范围就产生本错误32位IEEE值的范围是
±1.175494E-38到±3.402823E+38
247非位置/常数初始化
一个有效的初始化表达式必须是一个常数值求值或一个目标名加或减去一个常
数
248集合初始化需要大括号
给定struct或union初始化缺少大括号{}
249段<名>段太大
编译器检测到一个数据段太大一个数据段的最大的大小由存储空间决定
250\esc值超过255
一个字符串常数中的转义序列超过有效值范围最大值是255
252非法八进制数
指定的字符不是一个有效的八进制数
252主要控制放错地方行被忽略
主要控制必须被指定在C模块的开头在任何#include命令或声明前
253内部错误ASMGEN\CLASS
在下列情况下出现本错误
一个内在函数例如_testbit_被错误激活这种情况是在没有函数原
型存在和实参数目或类型错误对这种原因必须使用合适的声明文件
INTRINS.HSTRING.H参考第八章中的instrinsic函数
Cx51确认一个内部一致性问题请接洽技术支持
255switch表达式有非法类型
在一个switch表达式没有合法的数据类型
256存储模式冲突
一个包含alien属性的函数只能包含模式标识符small函数的参数必须位于内
部数据区这适用于所有的外部alien声明和alien函数例如
alienplm_func(charc)large{…}
产生错误256
257alien函数不能重入
一个包含alien属性的函数不能同时包含reentrant属性函数参数不能跳过虚拟
堆栈传递这适用于所有的外部alien声明和alien函数
258struct/union成员的存储空间非法
非法空间的参数被忽略
一个结构的成员或参数不能包含一个存储类型标识符但指针所指的目标可
能包含一个存储类型例如
structvp{charcodec;intxdatai;};
产生错误258
structv1{charc;intxdata*i;};
是正确的struct声明
259指针不同的存储空间
一个空指针被关联到别的不同存储空间的空指针例如
charxdata*p1;
charidata*p2;
p1=p2;/*不同的存储空间*/
260指针断开
一个空指针被关联到一些常数值这些值超过了指针存储空间的值范围例如
charidata*p1=0x1234;/*结果是0x34*/
261reentrant()内有bit
一个可重入属性的函数的声明中不能包含bit目标例如
intfunc1(inti1)reentrant{
bitb1,b2;/*不允许*/
return(i1-1);
}
262using/disable不能返回bit值
用using属性声明的函数和禁止中断#pragmadisable的函数不能返回一个bit
值给调用者例如
bittest(void)using3
{
bitb0;
return(b0);
}
产生错误262
263保存/恢复堆栈保存溢出/下溢
#pragmasave的最大嵌套深度是八级堆栈的pragmasave和restore工作根据
LIFO后进先出规则
264内在的<内在的名称>声明/激活错误
本错误表示一个内在的函数错误定义参数数目或省略号如果用标准的.H
文件就不会产生本错误确认使用了Cx51所有的.H文件不要尝试对内在的
库函数定义自己的原型
265对非重入函数递归调用
非重入函数不能被递归调用因为这样会覆盖函数的参数和局部数据如果需
要递归调用需声明函数为可重入函数
267函数定义需要ANSI类型的原型
一个函数被带参数调用但是声明是一个空的参数列表原型必须有完整的参
数类型这样编译器就可能通过寄存器传递参数和适合应用的调用机制
268任务定义错误任务ID/优先级/using
任务声明错误
271asm/endasm控制放错地方
asm和endasm声明不能嵌套endasm要求一个汇编块前面用asm开头例如
#pragmaasm
...
汇编指令
...#pragmaendasm
272asm要求激活SRC控制
在一个源文件中使用asm和endasm要求文件用SRC控制编译那么编译器就
会生成汇编源文件然后可以用A51汇编
273asm/endasm在包含文件中不允许
在包含文件中不允许asm和endasm为了调试在包含文件不能有任何的可执
行代码
274非法的绝对标识符
绝对位置标识符对位目标函数和局部函数不允许位置必须和目标的存储
空间一致例如下面的声明是无效的因为间接寻址的范围是0x00到0xFF
idataint_at_0x1000;
278常数太大
当浮点参数超出32位的浮点值范围就产生本错误32位IEEE值的范围是
±1.175494E-38到±3.402823E+38
279多次初始化
试图多次初始化一个目标
280没有使用符号/标号/参数
在一个函数中声明了一个符号标号或参数但没有使用
281非指针类型转换为指针
引用的程序目标不能转换成一个指针
282不是一个SFR引用
本函数调用要求一个SFR作为参数
283asmparms参数不适合寄存器
参数不适合可用的CPU寄存器
284<名称>:
在可覆盖空间函数不再可重入
一个可重入函数包含对局部变量的明确的存储类型标识符函数不再
完全可重入
300注释未结束
一个注释没有一个结束符*/
301期望标识符
一个预处理器命令期望一个标识符
302误用#操作符
字符操作符#没有带一个标识符
303期望正式参数
字符操作符#没有带一个标识符表示当前所定义的宏的一个正式
参数名
304错误的宏参数列表
宏参数列表没有一个大括号逗号分开的标识符列表
305string/char常数未结束
一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- keil 编译 错误