附录B    Keil C51 编译常见错误与警告
在利用Keil C51进行单片机软件程序的编写、调试过程中,经常会出现这样的现象,因为疏忽大意或是对于程序编写规则的不熟悉等原因,工程编译不能正常通过,导致最终未能生成单片机用于下载烧片所需的.hex文件。以下列举出了一些在工程编译过程中,常见的警告或错误的提示信息,以及解决这些警告或错误的具体方法;给出了常见编译器错误信息的查方法和Keil C51编译器常见错误与警告提示信息中英文对照表,供读者在工程调试和编译过程中参考。
一、常见错误与警告现象
现象一:部分程序如下:
{
ET0=1
ET1=1;
}
错误编号:C141
原因:程序LED.C49行语句前缺少分号。
解决方法:语句 ET0=1后加";"即:ET0=1;
现象二:部分程序如下:
{
ET0=1
ET1=1;
}
错误编号:C100C141
原因:程序LED.C53行有中文标点符号“;”。
解决方法:将中文符号改变成英文符号“;
现象三:
警告编号:L16
原因:delay2( )函数未被其它函数调用,它会占用程序存放空间。
解决方法:
(1)删除delay2( )函数;
(2)检查程序,某调用该子函数;
(3)利用注释“/* */”将整个delay2()函数体包含,可保留该函数但不被编译。
现象四:
警告/错误编号:C206C267C231
原因:delay’函数未定义,即未编写程序内容或函数已定义但未作声明。
解决方法:(1)将该子函数放在调用它的主调函数前;
          (2) 在调用它的主调函数前,对该函数进行声明。
现象五:
警告编号:C318
原因:在编译main.c 程序过程中由于main.c 使用了头文件包含#include buzzer.h,但编译器却不见buzzer.h头文件。
解决方法:到相应的buzzer.h或编写buzzer.h文件,并存入到c:\keil的相关目录中。
现象六:
错误编号:C237
原因:‘delay’函数名称重复定义,即有两个重名的函数。
解决方法:改变其中一个函数的名称,使两个函数名称不相同。
现象七:
错误编号:C202
原因:变量‘sh’未作定义声明,可能是拼写错误或是未区分大小写。
解决方法:(1)在使用该变量前对该变量定义声明;
(2)在确定该变量不使用时,将其删除;
(3)改正错误的拼写。
二、Keil C51错误与警告的查询
前述列举的警告和错误,仅仅是编译软件给出错误或警告的一个部分,对于大多数的错误和警告对应的原因及解决实例,读者可以参照下面的过程自行查Keil C51自带的帮助文件,以求解决可能出现的问题。
Keil C51错误与警告包含在名为errors.chm的文件中,该文件一般存放在keil安装目录中,其路径为…\Keil\C51\HLP\errors.chm,如下图所示。
打开该文件,其中列出了600多条错误与警告的帮助信息,读者可以自行参阅。
三、Keil C51编译器常见错误与警告提示信息中英文对照表
序号
英文提示信息
中文译文
1
Ambiguous operators need parentheses
不确定的操作需要用括号括起来
2
Ambiguous symbol ‘xxx’
不确定的符号
3
Argument list syntax error
参数表语法错误
4
Array bounds missing
数组界限符丢失
5
Array size toolarge
数组尺寸太大
6
Bad character in paramenters
参数中有不适宜的字符
7
Bad file name format in include directive
包含命令中有不正确的文件名格式
8
Bad ifdef directive synatax
编译预处理ifdef 有语法错
9
Bad undef directive syntax
编译预处理undef 有语法错
10
Bit field too large
位字段太长
11
Call of non-function
调用了未定义的函数
12
Call to function with no prototype
调用函数时没有函数的说明
13
Cannot modify a const object
不允许修改常量对象
14
Case outside of switch
case 语句在switch语句外
15
Case syntax error
Case 语法错误
16
Code has no effect
代码不能执行
17
Compound statement missing {
复合语句丢失"{"
18
Conflicting type modifiers
不明确的类型说明符
19
Constant expression required
要求常量表达式
20
Constant out of range in comparison
在比较中常量超出范围
21
Could not find file ‘xxx’
不到XXX 文件
22
Declaration missing ;
声明缺少;
23
Declaration syntax error
声明中出现语法错误
24
Default outside of switch
Default 出现在switch 语句之外
25
Define directive needs an identifier
定义编译预处理需要标识符
26
Division by zero
用零作除数
27
Do statement must have while
Do-while 语句中必须while
28
Enum syntax error
枚举类型语法错误
29
Enumeration constant syntax error
枚举常数语法错误
30
Error directive :xxx
错误的编译预处理命令
31
Error writing output file
写输出文件错误
32
Expression syntax error
表达式语法错误
33
Extra parameter in call
调用时出现多余错误
34
File name too long
文件名太长
35
Function call missing )
函数调用缺少括号“)”
36
Fuction definition out of place
函数定义位置错误
37
Fuction should return a value
函数必需返回一个值
38
Hexadecimal or octal constant too large
16 进制或8 进制常数太大
39
Illegal character ‘x’
非法字符x
40
Illegal initialization
c51中字符串函数非法的初始化
41
Illegal Hexadecimal digit
非法的16 进制数字
42
Illegal pointer subtraction
非法的指针相减
43
Illegal use of floating point
非法的浮点运算
44
Illegal use of pointer
非法使用指针
45
Improper use of a typedefsymbol
类型定义符号使用不恰当
46
Incompatible storage class
不相容的存储类别
47
Incompatible type conversion
不相容的类型转换
48
Incorrect number format
错误的数据格式
49
Incorrect use of default
Default 使用不当
50
Invalid indirection
无效的间接运算
51
Invalid pointer addition
无效的指针相加
52
Irreducible expression tree
无法执行的表达式运算
53
Lvalue required
需要逻辑值
54
Macro argument syntax error
宏参数语法错误
55
Macro expansion too long
宏扩展后太长
56
Mismatched number of parameters in definition
定义中参数个数不匹配
57
Misplaced break
此处不应出现break 语句
58
Misplaced continue
此处不应出现continue 语句
59
Misplaced decimal point
此处不应出现小数点
60
Must be addressable
必须是可以编址的
61
Must take address of memory location
必须存储定位的地址
62
No declaration for function ‘xxx’
函数xxx没有声明
63
No type information
没有类型信息
64
Not a valid expression format type
不合法的表达式格式
65
Not an allowed type
不允许使用的类型
66
Numeric constant too large
数值常太大
67
Out of memory
内存不够用
68
Parameter ‘xxx’ is never used
参数xxx 没有用到
69
Pointer required on left side of ->
符号->的左边必须是指针
70
Possible use of ‘xxx’ before definition
在定义之前就使用了xxx(警告)
71
Possibly incorrect assignment
赋值可能不正确
72
Redeclaration of ‘xxx’
重复定义了xxx
73
Redefinition of ‘xxx’ is not identical
xxx 的两次定义不一致
74
Register allocation failure
寄存器定址失败
75
Repeat count needs an lvalue
重复计数需要逻辑值
76
Statement missing ;
语句后缺少;
77
Sub scripting missing ]
下标缺少右方括号
78
Symbol limit exceeded
符号超限
79
Too few parameters in call
函数调用时的实参少于函数的参数不

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。