C51编译器识别错类型有三种
1、致命错误:伪指令控制行有错,访问不存在的原文件或头文件等。
2、语法及语义错误:语法和语义错误都发生在原文件中。有这类错误时,给出
提示但不产生目标文件,错误超过一定数量才终止编译。
3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题。程序
员应斟酌处理。
D.1致命错误
C_51 FATAL_ERROR
ACTION: <;当前行为>
LINE: <;错误所在行>
ERROR: <;错误信息> terminated
或C_51 FATAL ERROR
ACTION: <;当前行为>
FILE: <;错误所在文件>
ERROR: <;错误信息> terminated
C_51 TERMINA TED C_51
(1)ACTION的有关信息
*PARSING INVOKE-/#PRAGMA_LINE
在对#pragma指明的控制行作此法分析时出错。
*ALLOCATING MEMORY
系统分配存储空间时出错。编译较大程序需要512k空间。
*OPENING INPUT_FILE
parse error怎么解决
打开文件时,未到或打不开源文件/头文件。
*CREA TE LIST_FILE/OBJECT_FILE/WORK_FILE
不能创建上述文件。可能磁盘满或文件已存在而且写保护。
*PARSING SOURCE_FILE/ANALYZING DECLARATIONS
分析源程序时发现外部引用名太多。
*GENERA TING 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 FROM A DISK_FILE
源文件和头文件必须存在于硬盘或软盘上。控制台、CON、CI或类似设备不允许作为输入文件。
*MORE THAN 256 SEGMENTS/PUBLICS/EXTERNALS
受OMF_51的历史限制,一个源程序不能超过256个各种函数的类型段,256个全局变量,256个公共定义或外部引用名。不使用为变量可以减少使用的段数。使用static存储类型说明符可减少全局变量的使用数目。合理调整定义性说明的位置可减少外部引用名的使用数目。
*FILE WRITE ERROR
当向list、prelist、work或object文件中写内容时,由于空间不够而发生错误。
*NON_NULL ARGUMENT EXPECTED
所选的控制参数需要一个括号内的变量,如一个文件夹或一个数。
*“(”AFTER CONTROL EXPECTED
变量的左括号丢失。
*“)”AFTER PARAMETER EXPECTED
变量的右括号丢失。
*RESPECIFIED OR CONFLICTING CONTROL
所选的控制参数与前面发生冲突或重复,例如CODE和NOCOND
*BAD DECIMAL NUMBER
控制参数的数字含有非法数,需要使用十进制数。
*OUT OF RANGE DECIMAL NUMBER
控制参数的数字越界,例如OPTIMIZE的参量为0-5。
*IDENTIFIER EXPECTED
控制参数DEFINE需要一个标识符做参量,与C语言的规则相同。
*PARSE STACK OVERFLOW
分析栈溢出。可能是源程序包含特别复杂的表达式,或功能块嵌套数超过15。
*PREPOCESSOR: MACRO TO NESTED
宏扩展期间,预处理器的栈耗用太大。表明宏嵌套太多,或有递归宏定义。
*PREPOCESSOR: LINE TOO LONG(510)
宏扩展后行超过510个字符。
*CAN’T HA VE GENERAL CONTROL IN INVOCATION LINE
一般控制(如EJECT)不能是命令行的一部分,应将它们放入源文件“pragma”预处理行中。
D.2 语法及语义错误
D.2.1错误格式
这类错误在列表文件中产生如下格式的信息:
***ERROR<number>IN LINE<line>OF<file>:error message
***WARING<number>IN LINE<line>OF<file>:warning message
<number>表示错误行;
<line>表示源文件或头文件中与错误或警告相关的行;
<file>指明了错误所在的源文件或头文件;
D.2.2错误信息及可能发生的原因
*ERROR100:unprintable character 0x??skipped
源文件中发现非法字符(注意,注解内的字符不做检查)。
*ERROR101:unclosed string
串未用引号结尾。
*ERROR 102:string too long
串不得超过511个字符。为了定义更长的串,用户必须使用续行符‘\’逻辑的继续该串,在词汇分析时遇到以该符号结尾的行会与下行连接起来。
*ERROR 103: invalid character constant
试图再声明一个已定义的宏,已存在的宏可以用#undef指令删除。预定义的宏不能删除。*ERROR 104: identifier expected
预处理器指令期望产生一个标示符,如ifdef<name>。
*ERROR 105: unclosed comment
当注解无结束界定符(*/)时产生此错误。
*EROOR 106: unbalanced#if-endif controls
endif的数量与if或ifdef的数量不匹配。
*ERROR 107:include file nesting exceeds 9
include指令后的文件名无效或丢失
*ERROR 108: expected string,如#error “string”
预处理器指令期望一个串变量。
*ERROR 109:<user error text>
由#error伪指令引入的错误信息以错误信号形式显示。
*ERROR 110:missing directive
预处理行#后缺少伪指令。
*ERROR 111:unknown directive
预处理行#后不是伪指令。
*ERROR 112:misplaced ‘elif’
*ERROR 113:misplaced ‘else’
*ERROR 114:misplaced ‘endif’
指令elif/else/endif 只有在if、ifdef、ifndef指令内才是合法的。
*ERROR 117:bad integer expression
if/elif指令的数值表达式有语法错误。
*ERROR 118:missing’(‘after macro identifier
宏调用中实参表的左括号丢失
*ERROR 119:reuse of macro formal parameter
宏定义形参名重复使用
*ERROR 120:‘C’unexpected in formal list
形参表中不允许有字符‘c’,应用逗号代替
*ERROR 121:missing ‘)’after actual parameter
宏调用实参表的右括号丢失
*ERROR 122:illegal macro invocation
宏调用的实参表与宏定义中的形参表不同
*ERROR 123:missing macro name after ‘define’
#define 伪指令后缺预定义的宏
*ERROR 124:expected macro formal parameter
宏定义要求形参名
*ERROR 125:declarater too complex
说明过于复杂
*ERROR 126:type-stack underflow
对象的声明至多只能包含20个类型修饰符(【】,*,(),)错误126经常在错误125之前,两者一起发生。
*ERROR 127:invalid storage class
对象用无效的存储类所说明。当在函数外用auto/register 存储时会发生这种情况。
*ERROR 128:memory space: illegal memory space ‘memory space ’used
函数参数的存储类由存储模式(SMALL LARGE COMPACT)决定用户不能改变,使用不同于存储模式的自动变量应该为静态的存储类
*ERROR 129:missing’ ;’before ‘token’
该错误表示分号丢失,通常该错误会引发一连串的错误,引发的这些错误无关紧要。因为缺少分号后
编译器不能做正确的语法分析
*ERROR 130:value out of range
using 或interrupt 指令后参数越限。using用的寄存器组号位0-3,interrupt 需要0-15的中断号
*ERROR 131:duplicate function-parameter
函数中形参名重复,形参名应彼此不同
*ERROR 132:not in formal parameter list
函数内参数声明使用的名字未出现在参数表中
*ERROR 133:char function(v0,v1,v2)
Char*v0,*v1,*v5;/ *’v5’在形参中未出现
*ERROR 134:xdata/idata/pdata/data on function not permitted
函数总是驻留于0x5xxxx的code存储区,不能位于xdata/idata/pdata/data空间
*ERROR 135:bad storage class for bit
位变量的定义可以接受static或extern的存储类,用REGIESTER和ALIEN都是非法的
*ERROR 136:‘void’on variable
‘void’类型只允许作为函数的返回类型或与指针类型合用(void*)
*ERROR 137:illegal parameter type:’function’
函数参数的类型不能是函数,然而函数指针可以作为参数
*ERROR 138:interrupt ()may not receive or return value (s)
中断函数既不能有参数又不能有返回值
*ERROR 139:illegal use of ‘alien’
关键字alien 将函数定义为PL/M51规定的过程与函数结构。这意味着C函数中有参数的缩记符号(即funct(…);)时是不能用alien的
*ERROR 140:bit in illegal memory-space
位变量的定义可包含修饰符DATA,如果无修饰符则假定为DATA。因为位变量始终位于0x4xxx的内部数据存储器中,当试图采用其他存储空间就会产生这个错误。
*ERROR 141:NEAR<token>:expected<token>
编译器所见的单词是错误的。期望正确的单词
*ERROR 142:invalid base address
Sfr说明中的基址有错。有效基址为0x80-0xff。如果声明采用base^pos形式,则基址是8的整数倍
*ERROR 143:invalid absolute bit position
Sbit 说明中位地址必须在0x80-0xff之间
*ERROR 144:base^pos:invalid bit position
Sbit 说明中位pos必须在0~7之间
*ERROR 145:undeclared sfr
Sfr未说明
*ERROR 146:invalid sfr
绝对位地址说明(base^pos)包含无效的基地址。这个基地址必须与sfr名相对应
*ERROR 147:object too large
对象不能超过65536(64k)字节
*ERROR 148:field not permitted in union
联合不能包含位成员,这个限制是由8051结构决定的。
*ERROR 149:function member in struct/union
结构或者联合不能包含函数类型的成员。但是指向函数的指针是允许的
*ERROR 150:bit member in struct/union
结构或者联合不能包含位类型的成员,这个限制是由8051结构决定的
*ERROR 151:self relative struct/union
结构或者联合不能包含自身
*ERROR 152:bit field type too small for number of bits
位域声明中指定的位数超过所给原型中位的数量
*ERROR 153:named bit-field cannot have 0 width
命名的域宽度为0错误,只有未命名的位域允许是0宽度
*ERROR 154:pro to field
无指向位域指针的类型
*ERROR 155:char/int required for fields
位域基类型要求char或int类型,unsigned char 或unsigned int 也有效
*ERROR 156:alien permitted on function only
Alien 只能用于函数
*ERROR 157:var_parms on alien function
有变参数的函数不能用alien ,因为PL/M51函数只能用固定数量的参数
*ERROR 158:function contains unnamed parameter
函数定义的参数表中包含无名参数。无名参数只允许用于函数的原型中
*ERROR 159:type follows void
函数原型声明中可含一个空的参数表f(void)。V oid后不能再用其他类型定义
*ERROR 160:void invalid
V oid类型只能与指针合用或表明函数没有返回值
*ERROR 161:formal parameter ignored
函数内的外部函数引用声明使用了无类型的参数表。例如“extern(a,b,c);”要求形参表
*ERROR 162:duplicate function-parameter
函数内参数名重复
*ERROR 163:unknown array size
一般的不管是一维数组还是多维数组或外部数组,都需要指定数组的大小,这个大小是由编译器的初始化时计算,这个错误表明试图为一个未定维的数组使用sizeof运算符,会哦着一个多维数组的附加元素未定义。
*ERROR 164:ptr to null
这一个错误通常是由前一个错误造成的
*ERROR 165:ptr to bit
指向位的指针不是合法的类型
*ERROR 166:array of function
数组不能包含函数,但可能包含指向函数的指针。
*ERROR 167:array of fields
位域不能安排为数组
*ERROR 168:array of bit
数组没有位类型
*ERROR 169:function returns function
函数不能返回函数,但可以返回一个指向函数的指针
*ERROR 170:function returns array
函数不能返回数组,但可返回指向数组的指针
*ERROR 171:missing enclosing swith
Break/continue 语句只能出现在for,while,do while或switch语句中间。
*ERROR 172:missing enclosing swith
Case语句只能用在switch语句中
*ERROR 173:missing return-expression
返回类型不是integer的函数必须包含一条代表达式的return语句。由于要与老版本兼容,编译器对返回整形值的函数不做检查
*ERROR 174:return-expression on void-function
V oid 函数不能返回值,因此不能包含带表达式return的语句
*ERROR 175:duplicate case value
每个case语句必须包含一个常量表达式做其变量,这个值不能在switch语句的各级中出现多次
*ERROR 176:more than one default
Switch语句中不能包含多于一个的default语句
*ERROR 177:different struct/union
赋值或参数传递中使用了结构/联合的不同类型
*ERROR 178:struct/union comparison illegal
根据ANSI C,两个结构或联合的比较是不允许的
*ERROR 179:cannot/cast from/to void-type
将void类型转化为其他类型数据或将其他类型转化为void类型都是非法的
*ERROR 180:cannot cast to’function’
转化为function是非法的,使用函数指针指向不同的函数
*ERROR 181:incompatible operand
在所给的运算符中至少有一个操作符类型是无效的
*ERROR 182:point to different object
报告指针使用不一致
*ERROR 183:unmodifiable value
预修改的对象位于CODE存储区,因而不能修改
*ERROR 184:sizeof :illegal operand
Sizeof运算符不能决定函数或位域大小
*ERROR 185:different memory space
对象说明的存储空间与前面的不一致
*ERROR 186:invalid dereference
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论