《keil中的常见错误和警告资料》由会员分享,可在线阅读,更多相关《keil中的常见错误和警告资料(21页珍藏版)》请在金锄头文库上搜索。
1、 Keil 中的中的常见常见错误错误和和警告警告 李友全李友全 编辑整理编辑整理 大家若发现有这里查不出大家若发现有这里查不出的的错误错误或警告或警告请在群里通知我请在群里通知我 C51 编译器识别错类型有三种 1、致命错误:伪指令控制行有错、命令行指定的无效选项、访问不存在的原文件或头文件等。致命错误立即终 止程序编译。 2、语法及语义错误:语法和语义错误都发生在源文件中。有这类错误时,给出提示但不产生目标文件,错误超 过一定数量才终止编译。 3、警告:警告出现并不影响目标文件的产生,但执行时有可能发生问题,程序员应斟酌处理。 错误信息及可能发生的原因列表 *ERROR 100:unprin
2、table character 0x?skipped 源文件中发现非法字符(注意,注解内的字符不做检查)。 *ERROR 101:unclosed string 字符串未用引号结尾。 *ERROR 102:string too long 字符串不得超过 511 个字符。为了定义更长的串,用户必须使用续行符逻辑的继续该字 符串,在词汇分析时遇到以该符号结尾的行会与下行连接起来. *ERROR 103: invalid character constant 试图再声明一个已定义的宏,已存在的宏可以用#undef 指令删除。预定义的宏不能删除。 *ERROR 104: identifier expe
3、cted 预处理器指令期望产生一个标示符,如 ifdef。 *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: 由#error 伪指令引入的错
4、误信息以错误信号形式显示。 *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:missin
5、g(after macro identifier 宏调用中实参表的左括号丢失 *ERROR 119:reuse of macro formal parameter 宏定义形参名重复使用 *ERROR 120:Cunexpected in formal list 形参表中不允许有字符c,应用逗号代替 *ERROR 121:missing )after actual parameter 宏调用实参表的右括号丢失 *ERROR 122:illegal macro invocation 宏调用的实参表与宏定义中的形参表不同 *ERROR 123:missing macro name after def
6、ine #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:me
7、mory 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
8、-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/pda
9、ta/data 空间 *ERROR 135:bad storage class for bit 位变量的定义可以接受 static 或 extern 的存储类,用 REGIESTER 和 ALIEN 都是非法的 *ERROR 136:voidon variable void类型只允许作为函数的返回类型或与指针类型合用(void*) *ERROR 137:illegal parameter type:function 函数参数的类型不能是函数,然而函数指针可以作为参数 *ERROR 138:interrupt ()may not receive or return value (s) 中断函数既
10、不能有参数又不能有返回值 *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:expected 编译器所见的单词是错误的。期望正确的单词 *ERROR
11、142:invalid base address Sfr 说明中的基址有错。有效基址为 0x80-0xff。如果声明采用 basepos 形式,则基址是 8 的 整数倍 *ERROR 143:invalid absolute bit position Sbit 说明中位地址必须在 0x80-0xff 之间 *ERROR 144:basepos:invalid bit position Sbit 说明中位 pos 必须在 07 之间 *ERROR 145:undeclared sfr Sfr 未说明 *ERROR 146:invalid sfr 绝对位地址说明(basepos)包含无效的基地址。
12、这个基地址必须与 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 r
13、elative 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 或
14、 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)。Void 后不能再用其他
15、类型定义 *ERROR 160:void invalid Void 类型只能与指针合用或表明函数没有返回值 *ERROR 161:formal parameter ignored 函数内的外部函数引用声明使用了无类型的参数表。例如“ extern(a,b,c);”要求形参表 *ERROR 162:duplicate function-parameter 函数内参数名重复 *ERROR 163:unknown array size 一般的不管是一维数组还是多维数组或外部数组,都需要指定数组的大小,这个大小是由编 译器的初始化时计算,这个错误表明试图为一个未定维的数组使用 sizeof 运算符,会
16、哦着一 个多维数组的附加元素未定义。 *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 1