Keil+C编译器常见警告与错误信息的解决方法

Keil+C编译器常见警告与错误信息的解决方法
Keil+C编译器常见警告与错误信息的解决方法

???????

本章列出了编程中可能遇到的致命错误语法错误和警告信息每节包括一个信息

的主要说明和消除错误或警告条件可采取的措施

致命错误

致命错误立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不能访问一个特定的源包含文件时也产生致命错误

致命错误信息采用下面的格式

C51 FATAL-ERROR –

ACTION

LINE:

ERROR: C51 TERMIANTED.

C51 FATAL-ERROR –

ACTION

FILE:

ERROR: C51 TERMIANTED.

下面说明Action和Error中可能的内容

Actions

ALLOCATING MEMORY

编译器不能分配足够的存储区来编译指定的源文件

CREATING LIST-FILE / OBJECT-FILE / WORKFILE

编译器不能建立列表文件OBJ文件或工作文件这个错误的出现可能是磁盘

满或写保护或文件已存在和只读

GENERATING INTERMEDIATE CODE

源文件包含的一个函数太大不能被编译器编译成虚拟代码尝试把函数分小或

重新编译

OPENING INPUT-FILE

编译器不能发现或打开所选的源或包含文件

PARSING INVOKE-/#PRAGMA-LINE

当在命令行检测到参数计算或在一个#pragma中检测到参数计算就产生这样

的错误

PARSING SOURCE-FILE/ANALYZING DECLARATIONS

源文件包含太多的外部参考减少源文件访问的外部变量和函数的数目

WRITING TO FILE

当写入列表文件OBJ文件或工作文件时遇到的错误

Errors

‘(‘ AFTER CONTROL EXPECTED

一些控制参数需要用括号包含一个参数当没有左括号时显示本信息

‘)’ AFTER PARAMETER EXPECTED

本信息表示包含没有参数的右括号

BAD DIGIT IN NUMBER

一个控制参数的数字参数包含无效字符只能是十进制数

CAN’T CREATE FILE

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

CAN’T HA VE GERERAL CONTROL IN INVOCATION LINE

一般控制例如EJECT不能包含在命令行把这些控制用#pragma声明放在

源文件中

FILE DOES NOT EXIST

没有发现定义在FILE行的文件

FILE WRITE-ERROR

因为磁盘空间不够写到列表预打印工作或目标文件时出错

IDENTIFIER EXPECTED

当DEFINE控制没有参数时产生本信息DEFINE要求一个参数作为标识符这和C语言的规则相同

MEMORY SPACE EXHAUSTED

编译器不能分配足够的存储区来编译指定的源文件如果始终出现这个信息应

该把源文件分成两个或多个小文件再重新编译

MORE THAN100ERRORS IN SOURCE-FILE

在编译时检测到的错误超过100个这使编译器终止

MORE THAN256SEGMENTS/EXTERNALS

在一个源文件中的参考超过256个单个的源文件不能有超过256个函数或外部参考这是INTEL目标模块格式OMF-51的历史的限制包含标量和/或bit声明

的函数在OBJ文件中生成两个有时候三个段定义

NON-NULL ARGUMENT EXPECTED

所选的控制参数需要用括号包含一个参数例如一个文件名或一个数字

OUT OF RANGE NUMBER

一个控制参数的数字参数超出范围例如OPTIMIZE控制只允许数字0到6值

7就将产生本错误信息

PARSE STACK OVERFLOW

解析堆栈溢出如果源程序包含很复杂的表达式或如果块的嵌套深度超过31级

就会出现这个错误

PREPROCESSOR LINE TOO LONG32K

一个中间扩展长度超过32K字符

PREPROCESSOR MACROS TOO NESTED

在宏扩展期间预处理器所用的堆栈太大这个信息通常表示一个递归的宏定义但也可表示一个宏嵌套太多

RESPECIFIED OR CONFLICTING CONTROL

一个命令行参数指定了两次或命令行参数冲突

SOURCE MUST COME FROM A DISK-FILE

源和包含文件必须存在控制台CON CI或类似的设备不能作为输入文件

UNKNOWN CONTROL

所选的控制参数不认识

语法和语义错误

语法和语义错误一般出现在源程序中它们确定实际的编程错误当遇到这些错误时

编译器尝试绕过错误继续处理源文件当遇到更多的错误时编译器输出另外的错误

信息但是不产生OBJ文件

语法和语义错误在列表文件中生成一条信息这些错误信息用下面的格式

*** ERROR number IN LINE line OF file:error message

这里

number错误号

line对应源文件或包含文件的行号

file产生错误的源或包含文件名

error message对错误的叙述说明

下表按错误号列出了语法和语义错误错误信息列出了主要说明和可能的原因和改正

号错误信息和说明

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没在正式的参数列表

一个函数的参数声明用了一个名称没在参数名列表中例如

char function(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或int unsigned char和unsigned int类型也行

156alien只允许对函数

157alien函数带可变参数

存储类alien只对外部PL/M-51函数允许符号ch a r*,…在alien函数中是非

法的PL/M-51函数通常要求一个固定的参数表

158函数包含未命名的参数

一个函数的参数列表定义包含一个未命名的抽象类型定义这个符号只允许在

函数原型中

159void后面带类型

函数的原型声明可包含一个空参数列表例如int func(void)在void后不

能再有类型定义

160void无效

void类型只在和指针组合或作为一个函数的不存在的返回值中是合法的

161忽视了正式参数

在一个函数内一个外部函数的声明用了一个没有类型标识符的参数名列表例

如extern yylex(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*bit ptr+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非法指针转换

bit float或集合类型的目标不能转换为指针

215非法类型转换

struct/union/void不能转换为任何别的类型

号错误信息和说明

216标号用在非数组中或维数超出

一个数组引用包含太大的维数或目标不是一个数组

217非整数索引

一个数组的维数表达式必须是char unsigned char int或unsigned int类型

别的类型都是非法的

218控制表达式用了void类型

在一个while for或do的限制表达式中不能用类型void

219long常数缩减为int

一个常数表达式的值必须能用一个int类型表示

220非法常数表达式

期望一个常数表达式目标名变量或函数不允许出现在常数表达式中

221非常数case/dim表达式

一个case或一个维数[ ]必须是一个常数表达式

222被零除

223被零取模

编译器检测到一个被零除或取模

225表达式太复杂需简化

一个表达式太复杂必须分成两个或多个子表达式

226重复的struct/union/enum标记

一个struct union或enum名早已定义

227表示一个union标记

一个union名称早已定义为别的类型

228表示一个struct标记

一个struct名早已定义为别的类型

229表示一个enum标记

一个enum名早已定义为别的类型

230未知的struct/union/enum标记

指定的struct union或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.H STRING.H参考第八章中的instrinsic函数

Cx51确认一个内部一致性问题请接洽技术支持

255switch表达式有非法类型

在一个switch表达式没有合法的数据类型

256存储模式冲突

一个包含alien属性的函数只能包含模式标识符small函数的参数必须位于内

部数据区这适用于所有的外部alien声明和alien函数例如

alien plm_func(char c) large {…}

产生错误256

257alien函数不能重入

一个包含alien属性的函数不能同时包含reentrant属性函数参数不能跳过虚拟

堆栈传递这适用于所有的外部alien声明和alien函数

258struct/union成员的存储空间非法

非法空间的参数被忽略

一个结构的成员或参数不能包含一个存储类型标识符但指针所指的目标可

能包含一个存储类型例如

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

产生错误258

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

是正确的struct声明

259指针不同的存储空间

一个空指针被关联到别的不同存储空间的空指针例如

char xdata *p1;

char idata *p2;

p1 = p2; /* 不同的存储空间 */

260指针断开

一个空指针被关联到一些常数值这些值超过了指针存储空间的值范围例如

char idata *p1 = 0x1234; /* 结果是0x34 */

号错误信息和说明

261reentrant()内有bit

一个可重入属性的函数的声明中不能包含bit目标例如

int func1(int i1) reentrant {

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

return(i1-1);

}

262using/disable不能返回bit值

用using属性声明的函数和禁止中断#pragma disable的函数不能返回一个bit

值给调用者例如

bit test(void) using 3

{

bit b0;

return(b0);

}

产生错误262

263保存/恢复堆栈保存溢出/下溢

#pragma save的最大嵌套深度是八级堆栈的pragma save和restore工作根据

LIFO后进先出规则

264内在的<内在的名称>声明/激活错误

本错误表示一个内在的函数错误定义参数数目或省略号如果用标准的.H

文件就不会产生本错误确认使用了Cx51所有的.H文件不要尝试对内在的

库函数定义自己的原型

265对非重入函数递归调用

非重入函数不能被递归调用因为这样会覆盖函数的参数和局部数据如果需

要递归调用需声明函数为可重入函数

267函数定义需要ANSI类型的原型

一个函数被带参数调用但是声明是一个空的参数列表原型必须有完整的参

数类型这样编译器就可能通过寄存器传递参数和适合应用的调用机制

268任务定义错误任务ID/优先级/using

任务声明错误

271asm/endasm控制放错地方

asm和endasm声明不能嵌套endasm要求一个汇编块前面用asm开头例如

#pragma asm

.

.

.

汇编指令

.

.

.

#pragma endasm

号错误信息和说明

272asm要求激活SRC控制

在一个源文件中使用asm和endasm要求文件用SRC控制编译那么编译器就

会生成汇编源文件然后可以用A51汇编

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

在包含文件中不允许asm和endasm为了调试在包含文件不能有任何的可执

行代码

274非法的绝对标识符

绝对地址标识符对位目标函数和局部函数不允许地址必须和目标的存储

空间一致例如下面的声明是无效的因为间接寻址的范围是0x00到0xFF

idata int _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常数未结束

一个字符串活字符常数是无效的典型的后引号丢失

306宏调用未结束

预处理器在收集和扩展一个宏调用的实际的参数时遇到输入文件的结

号错误信息和说明

307宏名称参数计算不匹配

在一个宏调用中实际的参数数目和宏定义的参数数目不匹配本错

误表示指定了太少的参数

308无效的整数常数表达式

一个if/elif命令的数学表达式包含一个语法错误

309错误或缺少文件名

在一个include命令中的文件名参数是无效的或没有

310条件嵌套过多20

源文件包含太多的条件编译嵌套命令最多允许20级嵌套

311elif/else控制放错地方

312endif控制放错地方

命令elif else和endif只有在if ifdef或ifndef命令中是合法的313不能清除预定义的宏名称

试图清除一个预定义宏用户定义的宏可以用#undef命令删除预定

义的宏不能清除

314#命令语法错误

在一个预处理器命令中字符#必须跟一个新行或一个预处理器

命令名例如if/define/ifdef…

315未知的#命令名称

预处理器命令是未知的

316条件未结束

到文件结尾endif的数目和if或ifdef的数目不匹配

318不能打开文件文件名

指定的文件不能打开

319文件不是一个磁盘文件

指定的文件不是一个磁盘文件文件不能编辑

320用户自定义的内容

本错误号未预处理器的#error命令保留#error命令产生错误号320

送出用户定义的错误内容终止编译器生成代码

321缺少<字符>

在一个include命令的文件名参数中缺少结束符例如

#include

325正参名称重复

一个宏的正参只能定义一次

326宏体不能以##开始或结束

##不能是一个宏体的开始或结束

327宏宏名超过50个参数

每个宏的参数数目不能超过50

警告

警告产生潜在问题的信息他们可能在目标程序的运行过程中出现警告不妨碍源文

件的编译

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

*** WARNING number IN LINE line OF file: warning message

这里

number错误号

line在源文件或包含文件中的对应行号

file错误产生的源或包含文件名

warning message警告的内容

下表按号列出了警告警告信息包括一个主要的内容和可能的原因和纠正措施

号警告信息和说明

173缺少返回表达式

一个函数返回一个除了int类型以外的别的类型的值必须包含一个

返回声明包括一个表达式为了兼容旧的程序对返回一个int值

的函数不作检查

182指针指向不同的目标

一个指针关联了一个不同类型的地址

185不同的存储空间

一个目标声明的存储空间和前面声明的同样目标的存储空间不同196存储空间可能无效

把一个无效的常数值分配给一个指针无效的指针常数是long或

unsigned long编译器对指针采用24位3字节低16位代表偏移

高8位代表选择的存储空间

198sizeof返回零

一个目标的大小计算结果为零如果目标是外部的或如果一个数组

的维数没有全知道则值是错误的

号警告信息和说明

206缺少函数原型

因为没有原型声明被调用的函数是未知的调用一个未知的函数通

常是危险的参数的数目和实际要求不一样如果是这种情况函数

调用不正确

没有函数原型编译器不能检查参数的数目和类型要避免这种警告

应在程序中包含函数的原型

函数原型必须在函数被调用前声明注意函数定义自动生成原型209实参太少

在一个函数调用中包含太少的实参

219long常数被缩减为int

一个常数表达式的值必须能被一个int类型所表示

245未知的pragma本行被忽略

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

258struct/union成员的存储空间方法

参数的存储空间被忽略

一个结构的成员或一个参数不能指定存储类型但是指针所指的目

标可以包含一个存储类型例如

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

产生警告258

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

对struct是正确的声明

259指针不同的存储空间

两个要比较的指针没有引用相同的存储类型的目标

260指针折断

把一个指针转换为一个更小偏移区的指针转换会完成但大指针的

偏移会折断来适应小指针

261bit在重入函数

一个reentrant函数不能包含bit因为bit标量不能保存在虚拟堆栈中265名称对非重入函数递归调用

发现对一个非重入函数直接递归这可能是故意的但对每个独立的

情况进行功能性检查通过生成的代码间接递归由连接/定位器检

号警告信息和说明

271asm/endams控制放错地方

asm和endasm不能嵌套endasm要求一个以asm声明开头的汇编块

例如

#pragma asm

.

.

.

汇编指令

.

.

.

#pragma endasm

275表达式可能无效

编译器检测到一个表达式不生成代码例如

void test(void) {

int i1,i2,i3;

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

i1 << i3; /* 结果未使用 */

}

276常数在条件表达式

编译器检测到一个条件表达式有一个常数值在大多数情况下是一个

输入错误例如

void test(void) {

int i1,i2,i3;

if( i1 = 1) i2 = 3; /* 常数被赋值 */

while( i3 = 2); /* 常数被赋值 */

}

277指针有不同的存储空间

一个typedef声明的存储空间冲突例如

typedef char xdata XCC; /* 存储空间xdata */

typedef XCC idata PICC; /* 存储空间冲突 */

280符号/标号未使用

一个符号或标号定义但未使用

307宏名称参数计算不匹配

一个宏调用的实参的数目和宏定义的参数数目不匹配表示用了太多

的的参数过剩的参数被忽略

317宏名称重新定义无效

一个预定义的宏不能重新定义或清除参考138页的预定义宏常数322未知的标识符

在一个#if命令行的标识符未定义等效为FALSE

323期望新行发现多余字符

一个#命令行正确但包含多余的非注释字符例如

#include foo

号警告信息和说明

324期望预处理器记号

期望一个预处理器记号但输入的是一个新行例如#line这里缺

少#line命令的参数

KEIL常见编译错误大全

KEIL常见编译错误大全 【致命错误】 立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不 能访问一个特定的源包含文件时也产生致命错误 致命错误信息采用下面的格式 C51FATAL-ERROR– ACTION: LINE: ERROR: C51TERMIANTED. C51FATAL-ERROR– ACTION: FILE: ERROR: C51TERMIANTED. 下面说明Action和Error中可能的内容 Actions ALLOCATING MEMORY 编译器不能分配足够的存储区来编译指定的源文件. CREATING LIST-FILE/OBJECT-FILE/WORKFILE 编译器不能建立列表文件,OBJ文件,或工作文件这个错误的出现可能是磁盘满或写保护,或文件已存在和只读. GENERATING INTERMEDIATE CODE 源文件包含的一个函数太大,不能被编译器编译成虚拟代码.尝试把函数分小或重新编译. OPENING INPUT-FILE 编译器不能发现或打开所选的源或包含文件. PARSING INVOKE-/#PRAGMA-LINE 当在命令行检测到参数计算,或在一个#pragma中检测到参数计算,就产生这样的错误. PARSING SOURCE-FILE/ANALYZING DECLARATIONS 源文件包含太多的外部参考.减少源文件访问的外部变量和函数的数目. WRITING TO FILE

C语言编译中的常见错误

C语言编译中的常见错误 1、警告类错误 ?‘XXX’declare but never used变量XXX已定义但从未用过。 ?‘XXX’is assigned a value which is never used变量XXX已赋值但从未用过。?Code has no effect 程序中含有没有实际作用的代码。 ? Non-portable pointer conversion不适当的指针转换,可能是在应该使用指针的 地方用了一个非0的数值。 ?Possib le use of ‘XXX’before definition表达式中使用了未赋值的变量 ?Possibly incorrect assignment这样的赋值可能不正确 ?Redeclaration of ‘main’一个程序文件中主函数main不止一个。 ?Suspicious pointer conversion可疑的指针转换。通常是使用了基本类型不匹配的指针。 ?Unreachable code程序含有不能执行到的代码。 2、错误或致命错误 ?Compound statement missing } in function main程序结尾缺少括号}。 ?“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。 ? Case outside of switch case不属于Switch结构,多由于switch结构中的花括 号不配对所致。 ?Case statement missing ‘:’ switch结构中的某个case之后缺少冒号。 ? Constant expression required定义数组时指定的数组长度不是常量表达式。 ? Declaration syntax error 结构体或联合类型的定义后缺少分号。 ? Declaration was expected 缺少说明,通常是因为缺少分界符如逗号、分号、右圆 括号等所引起的。 ?Default outside switch Default部分放到了switch结构之外,一般是因为花括号 不匹配而引起的。 ?do statement must have while do语句中缺少相应的while部分。 ? Expression syntax 表达式语法错。如表达式中含有两个连续的运算符

KEIL51调试时一些的错误总结

KEIL51调试时一些的错误总结 (1)提示无M51文件 编译时候提示: F:\...\XX.M51 File has been changed outside the editor, reload ? ------ 解决方法: 重新生成项目,产生STARTUP.A51即可。 (2)L15重复调用 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。 出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR 打断,一段时间后又可以 运行,但是相应数据不会丢失)。 原因之二是用于局部变量和变量(暂且这样翻译,arguments,[自变量,变元一数值,用于确定程序或子程序的值])的内存区被其他函数的内存区所覆盖,如果该函数被中断,则它的内存区就会被使用,这将导致其他函数的内存冲突。 例如,第一个警告中函数WRITE_GMVLX1_REG 在D_GMVLX1.C 或者 D_GMVLX1.A51被定义,它被一个中断服务程序或者一个调用了中断服务程序的 函数调用了,调用它的函数是VSYNC_INTERRUPT,在MAIN.C中。 解决方法: 如果你确定两个函数决不会在同一时间执行(该函数被主程序调用并且中断被禁止),并且该函数不占用内存(假设只使用寄存器),则你可以完全忽略这种警告。 如果该函数占用了内存,则应该使用连接器(linker)OVERLAY指令将函数从覆盖分析(overlay analysis)中除去,例如: OVERLAY (?PR?_WRITE_GMVLX1_REG?D_GMVLX1 ! *) 上面的指令防止了该函数使用的内存区被其他函数覆盖。如果该函数中调用了其他函数,而这些被调用在程序中其他地方也被调用,你可能会需要也将这些函数排除在覆盖分析(overlay analysis)之外。这种OVERLAY指令能使编译器除去上述警告信息。 如果函数可以在其执行时被调用,则情况会变得更复杂一些。这时可以采用以下几种方法:

常见C语言错误提示信息

Ambiguous operators need parentheses 不明确的运算需要用括号括起Ambiguous symbol ''xxx'' 不明确的符号 Argument list syntax error 参数表语法错误 Array bounds missing 丢失数组界限符 Array size toolarge 数组尺寸太大 Bad character in paramenters 参数中有不适当的字符 Bad file name format in include directive 包含命令中文件名格式不正确 Bad ifdef directive synatax 编译预处理ifdef有语法错 Bad undef directive syntax 编译预处理undef有语法错 Bit field too large 位字段太长 Call of non-function 调用未定义的函数 Call to function with no prototype 调用函数时没有函数的说明 Cannot modify a const object 不允许修改常量对象 Case outside of switch 漏掉了case 语句 Case syntax error Case 语法错误 Code has no effect 代码不可述不可能执行到Compound statement missing{ 分程序漏掉"{" Conflicting type modifiers 不明确的类型说明符 Constant expression required

要求常量表达式 Constant out of range in comparison 在比较中常量超出范围Conversion may lose significant digits 转换时会丢失意义的数字Conversion of near pointer not allowed 不允许转换近指针 Could not find file ''xxx'' 找不到XXX文件 Declaration missing ; 说明缺少";" Declaration syntax error 说明中出现语法错误 Default outside of switch Default 出现在switch语句之外Define directive needs an identifier 定义编译预处理需要标识符Division by zero 用零作除数 Do statement must have while Do-while语句中缺少while部分Enum syntax error 枚举类型语法错误 Enumeration constant syntax error 枚举常数语法错误 Error directive :xxx 错误的编译预处理命令 Error writing output file 写输出文件错误 Expression syntax error 表达式语法错误 Extra parameter in call 调用时出现多余错误 File name too long 文件名太长 Function call missing ) 函数调用缺少右括号

gcc 常见的编译警告与错误(按字母顺序排列)备课讲稿

g c c常见的编译警告与错误(按字母顺序排 列)

gcc 常见的编译警告与错误(按字母顺序排列) C语言初学者遇到的最大问题往往是看不懂编译错误,进而不知如何修改程序。有鉴于此,本附录罗列了用gcc编译程序时经常出现的编译警告与错误。需要提醒读者的是,出现警告(warning)并不影响目标程序的生成,但出现错误(error)则无法生成目标程序。 为便于读者查阅,下面列出了经常遇到的警告与错误,给出了中英文对照(英文按字典顺序排列),并对部分错误与警告做了必要的解释。 #%s expects \FILENAME\ or … #%s 需要 \FILENAME\ 或… #%s is a deprecated GCC extension #%s 是一个已过时的 GCC 扩展 #%s is a GCC extension #%s 是一个 GCC 扩展 #~ error: #~ 错误: #~ In file included from %s:%u #~ 在包含自 %s:%u 的文件中 #~ internal error: #~ 内部错误: #~ no newline at end of file #~ 文件未以空白行结束

#~ warning: #~ 警告: #elif after #else #elif 出现在 #else 后 #elif without #if #elif 没有匹配的 #if #else after #else #else 出现在 #else 后 #else without #if #else 没有匹配的 #if #endif without #if #endif 没有匹配的 #if #include nested too deeply #include 嵌套过深 #include_next in primary source file #include_next 出现在主源文件中 #pragma %s %s is already registered #pragma %s %s 已经被注册 #pragma %s is already registered #pragma %s 已经被注册 #pragma once in main file #pragma once 出现在主文件中

Keil C 编译器常见警告与错误信息

https://www.360docs.net/doc/4f3732591.html,/support/man/docs/c51/c51_c277.htm错误信息查询 Keil C 编译器常见警告与错误信息 error C132 :“****”not in formal parameter list 花了偶将近半个小时来查找错误,最终发现原来是在头文件里的一个函数声明时露了一个分号造成紧挨着在它下面声明的参数not in formal parameter list。 记在在这里,免得以后忘记了,同时也供大家分享。 下面是另外一些常见的错误提示: 1.第一种错误信息 ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITE_GMVLX1_REG?D_GMVLX1 CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_SPI_SEND_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP ***WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?SPI_RECEIVE_WORD?D_SPI CALLER1: ?PR?VSYNC_INTERRUPT?MAIN CALLER2: ?C_C51STARTUP - 该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,

IAR常见编译错误

【转】IAR常见编译错误—比较全 IAR常见编译错误,比较全面的: 前面的序号表示错误编号 0 Format chosen cannot support banking Format unable to support banking. 1 Corrupt file. Unexpected end of file in module module (file) encountered XLINK aborts immediately. Recompile or reassemble, or check the compatibility between XLINK and C compiler. 2 Too many errors encountered (>100) XLINK aborts immediately. 3 Corrupt file. Checksum failed in module module (file). Linker checksum is linkcheck, module checksum is modcheck XLINK aborts immediately. Recompile or reassemble. 4 Corrupt file. Zero length identifier encountered in module module (file) XLINK aborts immediately. Recompile or reassemble. 5 Address type for CPU incorrect. Error encountered in module module (file) XLINK aborts immediately. Check that you are using the right files and libraries. 6 Program module module redeclared in file file. Ignoring second module XLINK will not produce code unless the Always generate output (-B) option (forced dump) is used. 7 Corrupt file. Unexpected UBROF – format end of file encountered in module module (file) XLINK aborts immediately. Recompile or reassemble. 8 Corrupt file. Unknown or misplaced tag encountered in module module (file). Tag tag XLINK aborts immediately. Recompile or reassemble. 9 Corrupt file. Module module start unexpected in file file XLINK aborts immediately. Recompile or reassemble. 10 Corrupt file. Segment no. segno declared twice in module module (file) XLINK aborts immediately. Recompile or reassemble. 11 Corrupt file. External no. ext no declared twice in module module (file) XLINK aborts immediately. Recompile or reassemble. 12 Unable to open file file XLINK aborts immediately. If you are using the command line, check the

常见gcc 编译错误整理

常见gcc 编译错误整理(开始)1 1 error: expected expression before 'else' else之前无表达式。 2 error: lvalue required as left operand of assignment 左值问题。 3 error: invalid storage class for function 'XXXXXX' 在文件的某个地方,丢失了一个大括号‘}’。 常见gcc编译警告整理(开始) 1、warning: no newline at end of file 在文件最后一行加上回车键 解释:在《Rationale for the C99 standard》一文中,有C99的相关信息: A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence. c/c++代码的每一行后面有一个“结束符”,也就是newline。避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。 2、warning: comparison between pointer and integer 解释:integer与pointer比较

VC6常见编译错误

目录 VC6.0编译常见错误 (1) 第一部分编译错误 (1) 1.error C2001: newline in constant (1) 2.error C2015: too many characters in constant (2) 3.error C2018: unknown character '0x##' (3) 4.error C2041: illegal digit '#' for base '8' (3) 5.error C2065: 'xxxx' : undeclared identifier (3) 6.error C2086: 'xxxx' : redefinition (5) 7.error C2374: 'xxxx' : redefinition; multiple initialization (5) 8.C2143: syntax error : missing ';' before (identifier) 'xxxx' (5) 9.error C2137: empty character constant (6) 10.error C2374: 'xxxx' : redefinition; multiple initialization (7) 第二部分链接错误 (7) 1.error LNK2001: unresolved external symbol _main (7) 2.error LNK2005: _main already defined in xxxx.obj (7) VC6.0编译常见错误 第一部分编译错误 1.error C2001: newline in constant 编号:C2001 直译:在常量中出现了换行。错误分析: (1)字符串常量、字符常量中是否有换行。

Keil编译常见问题

Error: L6200E Error: L6200E: Symbol temp multiply defined (by and .在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙 什么变量你给付了两次值 你看看是不是那个外部变量你又给赋值了 申明,其他.c文件对应的.h文件中用extern引用 error: #20 error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了 你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。 TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。需要将.C文件添加到工程文件中 warning: #1-D (7): warning: #1-D: last line of file ends without a newline 当使用keil编译时,弹出这样的警告信息:(7): warning: #1-D: last line of file ends without a newline 这个是由于在main函数的“}”后,没有加回车。 只要在main函数的“}”后加回车键,此警告信息即可消除。 error:#65 ...(27):error:#65:expected a ";"

分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如NB menu{..}; error:#1113: 折腾了大半天,才搞明白一个空操作的指令 先在网上查有的说是__asm{NOP;},从里调用,可犄角旮旯全找了,也没看到什么的文件。如果直接用,就出现error:#1113:InlineassemblernotpermittedwhengeneratingThumbcode 最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inlineassembly)的语法。而RMDK下,内联汇编仅支持ARM汇编语言,不支持Thumb或者Thumb-2汇编语言;但内嵌汇编器支持Thumb和Thumb-2。 __asm放到一个单独的子函数再被调用就没问题了 如下: __asmvoidnop(void) { NOP } 然后在之后的C代码中调用该函数: voidmain() { ... nop(); ...? }

编译时的常见错误

一、编译时的常见错误 1. 数据类型错误。此类错误是初学者编程时的常见现象, 下面是一些要引起注意的错误: (1) 所有变量和常量必须要加以说明。 (2) 变量只能赋给相同类型的数据。 (3) 对scanf()语句, 用户可能输入错误类型的数据项, 这将导致运行时出错, 并报出错信息。为避免这样的错误出现, 你就提示用户输入正确类型的数据。 (4) 在执行算术运算时要注意: a. 根据语法规则书写双精度数字。要写0.5, 而不是写.5; 要写1.0, 而不是1。尽管C语言会自动地把整型转换成双精度型, 但书写双精度型是个好习惯。让C语言为你做强行转换这是一种效率不高的程序设计风格。这有可能导致转换产生错误。 b. 不要用0除。这是一个灾难性的错误, 它会导致程序失败, 不管C 语言的什么版本, 都是如此, 执行除法运算要特别小心。 c. 确保所有的双精度数(包括那些程序输入用的双精度数) 是在实数范围之内。 d. 所有整数必须在整数允许的范围内。这适用于所有计算结果, 包括中间结果。 2. 将函数后面的";"忘掉。此时错误提示色棒将停在该语句下的一行, 并显示: Statement missing ; in function <函数名> 3. 给宏指令如#include, #define等语句尾加了";"号。 4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。引时色棒将位于错误所在的行, 并提示出有关丢掉括号的信息。 5. 没有用#include指令说明头文件, 错误信息提示有关该函数所使用的参数未定义。 6. 使用了Turbo C保留关键字作为标识符, 此时将提示定义了太多数据类型。 7. 将定义变量语句放在了执行语句后面。此时会提示语法错误。 8. 使用了未定义的变量, 此时屏幕显示: Undefined symbol '<变量名>' in function <函数名> 9. 警告错误太多。忽略这些警告错误并不影响程序的执行和结果。编译时当警告错误数目大于某一规定值时(缺省为100)便退出编译器, 这时应改变集成开发环境Options/Compiler/Errors中的有关警告错误检查开关为off。 10. 将关系符"=="误用作赋值号"="。此时屏幕显示: Lvalue required in function <函数名> 二、连接时的常见错误 1. 将Turbo C库函数名写错。这种情况下在连接时将会认为此函数是用户自定义函数。此时屏幕显示: Undefined symbol '<函数名>' in <程序名> 2. 多个文件连接时, 没有在"Project/Project name中指定项目文件(.PRJ文件), 此时出现找不到函数的错误。 3. 子函数在说明和定义时类型不一致。 4. 程序调用的子函数没有定义。 三、运行时的常见错误 1. 路径名错误。在MS-DOS中, 斜杠(\)表示一个目录名; 而在Turbo C 中斜杠是个某个字符串的一个转义字符, 这样, 在用Turbo C 字符串给出一个路径名时应考虑"\"的转义的作用。例如, 有这样一条语句: file=fopen("c:\new\tbc.dat", "rb"); 目的是打开C盘中NEW目录中的TBC.DAT文件, 但做不到。这里"\"后面紧接的分别是"n"及"t", "\n"及"\t"将被分别编译为换行及tab字符, DOS将认为它是不正确的文件名而拒绝接受, 因为文件名中不能和换行或tab字符。正确的写法应为: file=fopen("c:\\new\\tbc.dat", "rb"); 2. 格式化输入输出时, 规定的类型与变量本身的类型不一致。例如: float l;

Keil编程常见错误

uint i, j; uchar a = 0xfe; EA = 1; EX0 = 1;不能这样 EA = 1; EX0 = 1; uint i, j; uchar a = 0xfe; 否则出现外部中断.C(18): error C141: syntax error near 'unsigned' 外部中断.C(18): error C202: 'i': undefined identifier 外部中断.C(19): error C141: syntax error near 'unsigned' 外部中断.C(19): error C202: 'a': undefined identifier 外部中断.C(23): error C202: 'i': undefined identifier 外部中断.C(27): error C202: 'a': undefined identifier 外部中断.C(29): error C202: 'a': undefined identifier 外部中断.C(31): error C202: 'i': undefined identifier 外部中断.c - 8 Error(s), 0 Warning(s). 原因:顺序问题,keil中的顺序 外部中断和内部中断的区别是什么; 外部中断是在单片机的外面给单片机一个信号单片机收到这个信号开始中断这是外部中断 内部中断是通过软件把中断打开执行中断

error c236:‘——display’:different length of parameter lists参数列表的长度不同。 检查开始的函数声明和这定义的参数是否一致。 还有参数没说明类型 有很大的区别, 错误3 unreferenced local variable 是未使用定义的变量,就是你定义了但是没有使用。 错误4 syntax error语法错误。 电平触发方式是按照电平的高或者低来触发,所以用的时候,必须在发生触发事件后立即将电平拉到非触发电平上,如果不这样做的话,会导致程序一直在触发事件程序入口处,而不会执行其他地方的程序。所以一般比较少用。 边沿触发方式是按照(上或下)边沿触发事件,由于触发的条件是边沿(上或下),所以即使在触发事件后,保存原来的电平都没有关系,不会一直在触发的,一般都用这种方式。 错误5 #define uchar unsigned char 不能写成 #define unsigned char uchar 否则出现会出现很多错误 错误6 不能这样定义字符数组 int a = “wwwsad”只能用char 错误7 error C244: 'table':can't initialize, bad type or class 。意思是错误的或者坏的类

JAVA常见编译错误信息及说明

Java编译错误信息及说明 1、java:33:不是语句 解释:程序中出现了没有任何意义的字符(串),可能是无意中打出了没有任何意义的字符; 2、java:34:需要';' 解释:某条语句没有以分号结束; 3、java:36:缺少返回语句 解释:带返回值的函数缺少return语句; 4、java:33:不兼容的类型 解释:运算符两边的数据类型不一致或者不能做隐式转换; 5、java:36:无法访问的语句 解释:此语句永远不可能被执行,可能是此语句之前存在类似于while(true)的语句,导致此语句永远不可能被执行; 6、java:34:非法的表达式开始 解释:有不符合语法规范的表达式出现; 7、java:34:找不到符号 解释:使用了没有定义或没有引入的变量; 8、java:33:非法字符:\65307 解释:在中文输入状态下输入了一些标点符号; 9、java:18:不可转换的类型 解释:运算符两边的数据类型不一致或者不能做隐式转换; 10、java:19:"else"不带有"if" 解释:编译器找到else语句但是没有找到与之对应的if语句,可能是由于大括号没有成对出现;

11、java:12:可能损失精度 解释:把高精确度类型的数据赋值给低精确度类型的变量; 12、java:17:需要')' 解释:括号没有成对出现; 13、java:8:可能尚未初始化变量s 解释:局部变量s没有赋初值; 14、java:7:不可比较的类型:int和Boolean 解释:运算符两边操作数的数据类型不符合运算符的使用规范; 15、java:6:已在isLeap(int)中定义year 解释:变量year被重复定义; 16、java:21:字符字面值的行结尾不合法 解释:程序语句的结尾不是java规定的结束符号,而是其他的符号; 17、java:9:需要<标识符> 解释:可能是由于用户指定了数据类型,但未指定该类型的变量名; 18、java:8:无法从静态上下文中引用非静态变量this 解释:在静态方法中使用了非静态变量this; 19、java:12:在switch或loop外部中断 解释:在非循环语句或非switch语句中使用了中断循环功能的语句break; 20、java:21:对于结果类型为void的方法,无法返回值 解释:空返回值方法中出现了return语句; 21、java:12:需要数组,但找到int 解释:在应该出现数组的地方没有找到数组类型的变量,而是找到int类型的变量; 22、java:13:无法将Node中的setData(int)应用于()

keil 编译错误提示

C51编译器识别错类型有三种 1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。 2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出 提示但不产生目标文件,错误超过一定数量才终止编译。 3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序 员应斟酌处理。 D.1 致命错误 C_51 FATAL_ERROR ACTION: <当前行为> LINE: <错误所在行> ERROR: <错误信息> terminated 或C_51 FATAL ERROR ACTION: <当前行为> FILE: <错误所在文件> ERROR: <错误信息> terminated C_51 TERMINATED C_51 (1) ACTION 的有关信息 *PARSING INVOKE-/#PRAGMA_LINE 在对#pragma 指明的控制行作此法分析时出错。 *ALLOCATING MEMORY 系统分配存储空间时出错。编译较大程序需要512k空间。 *OPENING INPUT_FILE 打开文件时,未找到或打不开源文件/头文件。 *CREATE LIST_FILE/OBJECT_FILE/WORK_FILE 不能创建上述文件。可能磁盘满或文件已存在而且写保护。 *PARSING SOURCE_FILE/ANALYZING DECLARATIONS 分析源程序时发现外部引用名太多。 *GENERATING INTERMEDIATE CODE 源代码被翻译成内部伪代码,错误可能来源于函数太大而超过内部极限。 *WRITING TO FILE 在向文件(work,list,prelist或object file)写时发生错误。 (2)ERROR的有关信息 *MEMORY SPACE EXHAUSTED 所有可用系统空间耗尽。至少需要512k 字节空间。没有足够空间,用户必须检查常驻内存的驱动程序是否太多。 *FILE DOES NOT EXIST FILE 行定的文本文件名未发现。 *CAN’T CREAT FILE FILE 行定义的文件不能被创建。 *SOURCE MUST COME FROMA DISK_FILE 源文件和头文件必须存在于硬盘或软盘上。控制台、CON、CI 或类似设备不允许作为输入文件。 *MORE THAN 256 SEGMENTS/PUBLICS/EXTERNALS 受OMF_51的历史限制,一个源程序不能超过256个各种函数的类型段,256个全局变量,

keil c语言编程常见错误分析要点

1. Warning 280:’i’:unreferenced local variable 说明局部变量i 在函数中未作任何的存取操作解决方法消除函数中i 变量的宣告及即定义的参数在程序中并未调用 2 Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告 3Error:318:can’t open file ‘beep.h’ 说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 Error 237:’LedOn’:function already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间

解决方法去掉DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译 6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25 处并修正它 7 WARNING 206:’DelayX1ms’: missing function-prototype C:\8051\INPUT.C Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C 说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作宣告 解决方法编写DelayX1ms 的内容编写完后也要作宣告或作外部宣告可在delay.h 的包含档宣告成外部以便其它函数调用 8 ***WARNING 1:UNRESOLVED EXTERNAL SYMBOL SYMBOL:MUSIC3

keil常见错误及解决办法

查看文章 【转】 KEIL C编译器常见警告与错误信息的解决办法 2010-09-03 16:21 转载自朝阳暮鼓 最终编辑朝阳暮鼓 KEIL C编译器常见警告与错误信息的解决办法 1. Warning 280:’i’:unreferenced local variab le 说明局部变量i 在函数中未作任何的存取操作 解决方法消除函数中i 变量的宣告 2 Warning 206:’Music3’:missing function-prototype 说明Music3( )函数未作宣告或未作外部宣告所以无法给其他函数调用 解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数 则要写成extern void Music3(void),即作外部宣告 3 Compling :C:\8051\MANN.C Error:318:can’t open file ‘beep.h’ 说明在编译 C:\8051\MANN.C 程序过程中由于main.c 用了指令#include “beep.h”,但却找不到所致 解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中 4 Compling:C:\8051\LED.C Error 237:’LedOn’:function already has a body 说明LedOn( )函数名称重复定义即有两个以上一样的函数名称 解决方法修正其中的一个函数名称使得函数名称都是独立的 5 ***WARNING 16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_DELAYX1MS?DELAY 说明DelayX1ms( )函数未被其它函数调用也会占用程序记忆体空间 解决方法去掉 DelayX1ms( )函数或利用条件编译#if …..#endif,可保留该函数并不编译 6 ***WARNING 6 :XDATA SPACE MEMORY OVERLAP FROM : 0025H TO: 0025H 说明外部资料ROM 的0025H 重复定义地址 解决方法外部资料ROM 的定义如下 Pdata unsigned char XFR_ADC _at_0x25 其中XFR_ADC 变量的名称为0x25,请检查是 否有其它的变量名称也是定义在0x25 处并修正它

常见的编译错误信息

1、fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。 解决方法: 其一,包含正确路径的#include "stdafx.h"; 其二,在*.cpp文件的Setting里面设置,C++选项中的分类precompiled header,选择不包含头文件即可。 2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory 不能打开包含文件“R…….h”:没有这样的文件或目录。 3、error C2011: 'C……': 'class' type redefinition 类“C……”重定义。 4、error C2018: unknown character '0xa3' 不认识的字符'0xa3'。(一般是汉字或中文标点符号) 5、error C2057: expected constant expression

希望是常量表达式。(一般出现在switch语句的case分支中) 6、error C2065: 'IDD_MYDIALOG' : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。 7、error C2082: redefinition of formal parameter 'bReset' 函数参数“bReset”在函数体中重定义。 8、error C2143: syntax error: missing ':' before '{' 句法错误:“{”前缺少“;”。 9、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。 10、error C2196: case value '69' already used 值69已经用过。(一般出现在switch语句的case分支中) 11、error C2509: 'OnTimer' : member function not declared in 'CHello View' 成员函数“OnTimer”没有在“CHelloView”中声明。

相关文档
最新文档