Keil常见编译错误

合集下载

keil4 常见编译错误解决

keil4 常见编译错误解决

Keil C编译器常见警告与错误信息解决方法1.Warning280:’i’:unreferenced local variable说明局部变量i在函数中未作任何的存取操作解决方法消除函数中i变量的宣告2Warning206:’Music3’:missing function-prototype说明Music3()函数未作宣告或未作外部宣告所以无法给其他函数调用解决方法将叙述void Music3(void)写在程序的最前端作宣告如果是其他文件的函数则要写成extern void Music3(void),即作外部宣告3Compling:C:\8051\MANN.CError:318:can’t open file‘beep.h’说明在编译C:\8051\MANN.C程序过程中由于main.c用了指令#i nclude“beep.h”,但却找不到所致解决方法编写一个beep.h的包含档并存入到c:\8051的工作目录中4Compling:C:\8051\LED.CError237:’LedOn’:function already has a body说明LedOn()函数名称重复定义即有两个以上一样的函数名称解决方法修正其中的一个函数名称使得函数名称都是独立的5***WARNING16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS SEGMENT:?PR?_DELAYX1MS?DELAY说明DelayX1ms()函数未被其它函数调用也会占用程序记忆体空间解决方法去掉DelayX1ms()函数或利用条件编译#if…..#endif,可保留该函数并不编译6***WARNING6:XDATA SPACE MEMORY OVERLAPFROM:0025HTO:0025H说明外部资料ROM的0025H重复定义地址解决方法外部资料ROM的定义如下Pdata unsigned char XFR_ADC_at_0x25其中XFR_ADC变量的名称为0x25,请检查是否有其它的变量名称也是定义在0x25处并修正它7WARNING206:’DelayX1ms’:missing function-prototypeC:\8051\INPUT.CError267:’DelayX1ms‘:requires ANSI-style prototype C:\8051\INPUT.C说明程序中有调用DelayX1ms函数但该函数没定义即未编写程序内容或函数已定义但未作宣告解决方法编写DelayX1ms的内容编写完后也要作宣告或作外部宣告可在delay.h的包含档宣告成外部以便其它函数调用8***WARNING1:UNRESOLVED EXTERNAL SYMBOLSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)***WARNING2:REFERENCE MADE TO UNRESOLVED EXTERNALSYMBOL:MUSIC3MODULE:C:\8051\MUSIC.OBJ(MUSIC)ADDRESS:0018H说明程序中有调用MUSIC函数但未将该函数的含扩档C加入到工程档Prj作编译和连接解决方法设MUSIC3函数在MUSIC C里将MUSIC C添加到工程文件中去9***ERROR107:ADDESS SPACE OVERFLOWSPACE:DATASEGMENT:_DATA_GOUP_LENGTH:0018H***ERROR118:REFERENCE MADE TO ERRONEOUS EXTERNALSYMBOL:VOLUMEMODULE:C:\8051\OSDM.OBJ(OSDM)ADDRESS:4036H说明data存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存储模式设为SMALL则局部变量先使用工作寄存器R2~R7作暂存当存储器不够用时则会以data型别的空间作暂存的个数超过0x7f时就会出现地址不够的现象解决方法将以data型别定义的公共变量修改为idata型别的定义说明如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享10定义了全局变量而没有外部External声明:reference made to erroneous external Ram空间不足:public refers to ignore segment外部变量:定义处不用加External,声明处要加External将以data型别定义的公共变量修改为idata型别的定义11***ERROR L118:REFERENCE MADE TO ERRONEOUS EXTERNAL定义了某某函数或全部变量在不同文件里面想调用它,却在包含头文件里面少了extern 语句,或只有主程序和包含头文件没有(EXTERN......定义语句(函数)).如果调试时有些if结构里的语句符合条件没有执行,或者某些语句不符合条件也被执行,那是因为if和else里有相同的语句,编译的时候作优化处理了。

150!单片机编译器KEIL的常见错误汇总(中英对照)

150!单片机编译器KEIL的常见错误汇总(中英对照)

150!单片机编译器KEIL的常见错误汇总(中英对照)error 1:Out of memory 内存溢出error 2:Identifier expected 缺标识符error 3:Unknown identifier 未定义的标识符error 4:Duplicate identifier 重复定义的标识符error 5:Syntax error 语法错误error 6:Error in real constant 实型常量错误error 7:Error in integer constant 整型常量错误error 8:String constant exceeds line 字符串常量超过一行error 10:Unexpected end of file 文件非正常结束error 11:Line too long 行太长error 12:Type identifier expected 未定义的类型标识符error 13:T oo many open files 打开文件太多error 14:Invalid file name 无效的文件名error 15:File not found 文件未找到error 16:Disk full 磁盘满error 17:Invalid compiler directive 无效的编译命令error 18:T oo many files 文件太多error 19:Undefined type in pointer def 指针定义中未定义类型error 20:Variable identifier expected 缺变量标识符error 21:Error in type 类型错误error 22:Structure too large 结构类型太长error 23:Set base type out of range 集合基类型越界error 24:File components may not be files or objectsfile分量不能是文件或对象error 25:Invalid string length 无效的字符串长度error 26:Type mismatch 类型不匹配error 27:Invalid subrange base type 无效的子界基类型error 28:Lower bound greater than upper bound 下界超过上界error 29:Ordinal type expected 缺有序类型】error 30:Integer constant expected 缺整型常量error 31:Constant expected 缺常量error 32:Integer or real constant expected 缺整型或实型常量error 33:Pointer Type identifier expected 缺指针类型标识符error 34:Invalid function result type 无效的函数结果类型error 35:Label identifier expected 缺标号标识符error 36:BEGIN expected 缺BEGINerror 37:END expected 缺ENDerror 38:Integer expression expected 缺整型表达式error 39:Ordinal expression expected 缺有序类型表达式error 40:Boolean expression expected 缺布尔表达式error 41:Operand types do not match 操作数类型不匹配error 42:Error in expression 表达式错误error 43:Illegal assignment 非法赋值error 44:Field identifier expected 缺域标识符error 45:Object file too large 目标文件太大error 46:Undefined external 未定义的外部过程与函数error 47:Invalid object file record 无效的OBJ文件格式error 48:Code segment too large 代码段太长error 49:Data segment too large 数据段太长error 50:DO expected 缺DOerror 51:Invalid PUBLIC definition 无效的PUBLIC定义error 52:Invalid EXTRN definition 无效的EXTRN定义error 53:T oo many EXTRN definitions 太多的EXTRN定义error 54:OF expected 缺OFerror 55:INTERFACE expected 缺INTERFACEerror 56:Invalid relocatable reference 无效的可重定位引用error 57:THEN expected 缺THENerror 58:TO or DOWNTO expected 缺TO或DOWNTOerror 59:Undefined forward 提前引用未经定义的说明error 61:Invalid typecast 无效的类型转换error 62:Division by zero 被零除error 63:Invalid file type 无效的文件类型error 64:Cannot read or write variables of this type 不能读写此类型变量error 65:Pointer variable expected 缺指针类型变量error 66:String variable expected 缺字符串变量error 67:String expression expected 缺字符串表达式error 68:Circular unit reference 单元UNIT部件循环引用error 69:Unit name mismatch 单元名不匹配error 70:Unit version mismatch 单元版本不匹配error 71:Internal stack overflow 内部堆栈溢出error 72:Unit file format error 单元文件格式错误error 73:IMPLEMENTATION expected 缺IMPLEMENTATION error 74:Constant and case types do not match 常量和CASE类型不匹配error 75:Record or object variable expected 缺记录或对象变量error 76:Constant out of range 常量越界error 77:File variable expected 缺文件变量error 78:Pointer expression expected 缺指针表达式error 79:Integer or real expression expected 缺整型或实型表达式error 80:Label not within current block 标号不在当前块内error 81:Label already defined 标号已定义error 82:Undefined label in preceding statement part 在前面未定义标号error 83:Invalid @ argument 无效的@参数error 84:UNIT expected 缺UNITerror 85:';' expected 缺“;”error 86:':' expected 缺“:”error 87:',' expected 缺“,”error 88:'(' expected 缺“(”error 89:')' expected 缺“)”error 90:'=' expected 缺“=”error 91:':=' expected 缺“:=”error 92:'[' or '(.' Expected 缺“[”或“(.”error 93:']' or '.)' expected 缺“]”或“.)”error 94:'.' expected 缺“.”error 95:'..' expected 缺“..”error 96:T oo many variables 变量太多error 97:Invalid FOR control variable 无效的FOR循环控制变量error 98:Integer variable expected 缺整型变量error 99:Files and procedure types are not allowed here 该处不允许文件和过程类型error 100:String length mismatch 字符串长度不匹配error 101:Invalid ordering of fields 无效域顺序error 102:String constant expected 缺字符串常量error 103:Integer or real variable expected 缺整型或实型变量error 104:Ordinal variable expected 缺有序类型变量error 105:INLINE error INLINE错误error 106:Character expression expected 缺字符表达式error 107:Too many relocation items 重定位项太多error 108:Overflow in arithmetic operation 算术运算溢出error 112:CASE constant out of range CASE常量越界error 113:Error in statement 表达式错误error 114:Cannot call an interrupt procedure 不能调用中断过程error 116:Must be in 8087 mode to compile this 必须在8087模式编译error 117:Target address not found 找不到目标地址error 118:Include files are not allowed here 该处不允许INCLUDE文件error 119:No inherited methods are accessible here 该处继承方法不可访问error 121:Invalid qualifier 无效的限定符error 122:Invalid variable reference 无效的变量引用error 123:Too many symbols 符号太多error 124:Statement part too large 语句体太长error 126:Files must be var parameters 文件必须是变量形参error 127:Too many conditional symbols 条件符号太多error 128:Misplaced conditional directive 条件指令错位error 129:ENDIF directive missing 缺ENDIF指令error 130:Error in initial conditional defines 初始条件定义错误error 131:Header does not match previous definition 和前面定义的过程或函数不匹配error 133:Cannot evaluate this expression 不能计算该表达式error 134:Expression incorrectly terminated 表达式错误结束error 135:Invalid format specifier 无效格式说明符error 136:Invalid indirect reference 无效的间接引用error 137:Structured variables are not allowed here 该处不允许结构变量error 138:Cannot evaluate without System unit 没有System 单元不能计算error 139:Cannot access this symbol 不能存取符号error 140:Invalid floating point operation 无效的符号运算error 141:Cannot compile overlays to memory 不能编译覆盖模块至内存error 142:Pointer or procedural variable expected 缺指针或过程变量error 143:Invalid procedure or function reference 无效的过程或函数调用error 144:Cannot overlay this unit 不能覆盖该单元error 146:File access denied 不允许文件访问error 147:Object type expected 缺对象类型error 148:Local object types are not allowed 不允许局部对象类型error 149:VIRTUAL expected 缺VIRTUALerror 150:Method identifier expected 缺方法标识符error 151:Virtual constructors are not allowed 不允许虚构造函数error 152:Constructor identifier expected 缺构造函数标识符error 153:Destructor identifier expected 缺析构函数标识符error 154:Fail only allowed within constructors 只能在构造函数内使用Fail标准过程error 155:Invalid combination of opcode and operands 操作数与操作符无效组合error 156:Memory reference expected 缺内存引用指针error 157:Cannot add or subtract relocatable symbols 不能加减可重定位符号error 158:Invalid register combination 无效寄存器组合error 159:286/287 instructions are not enabled 未激活286/287指令error 160:Invalid symbol reference 无效符号指针error 161:Code generation error 代码生成错误error 162:ASM expected 缺ASMerror 166:Procedure or function identifier expected 缺过程或函数标识符error 167:Cannot export this symbol 不能输出该符号error 168:Duplicate export name 外部文件名重复error 169:Executable file header too large 可执行文件头太长error 170:Too many segments 段太多END。

KEIL常见编译错误大全

KEIL常见编译错误大全

KEIL常见编译错误大全【致命错误】立即终止编译这些错误通常是命令行指定的无效选项的结果当编译器不能访问一个特定的源包含文件时也产生致命错误致命错误信息采用下面的格式C51FATAL-ERROR–ACTION:<current action>LINE:<line in which the error is detected>ERROR:<corresponding error message>C51TERMIANTED.C51FATAL-ERROR–ACTION:<current action>FILE:<file in which the error is detected>ERROR:<corresponding error message>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当写入列表文件,OBJ文件,或工作文件时遇到的错误.Errors‘(‘AFTER CONTROL EXPECTED一些控制参数需要用括号包含一个参数.当没有左括号时显示本信息.‘)’AFTER PARAMETER EXPECTED本信息表示包含没有参数的右括号.BAD DIGIT IN NUMBER一个控制参数的数字参数包含无效字符.只能是十进制数.CAN’T CREATE FILE在FILE行定义的文件名不能建立.CAN’T HAVE 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 LONG(32K)一个中间扩展长度超过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类型堆栈下溢类型声明堆栈下溢这个错误通常死错误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存储区不能在别的存储区运行函数默认定义为存储类型code135bit的存储类错bit标量的声明可能包含一个static或extern存储类register或alien类是无效的136变量用了voidvoid类型只允许作为一个不存在的返回值或一个函数的空参数列表voidfunc(void)或和一个指针组合void*138Interrupt()不能接受或返回值一个中断函数被定义了一个或多个正式的参数或一个返回值中断函数不能包含调用参数或返回值140位在非法的存储空间bit标量的定义可以包含可选的存储类型data如果没有存储类型则默认为data因为位通常在内部数据存储区当试图对一个bit标量定义别的数据类型时会产生本错误141临近标志语法错误期待别的标志…编译器所见的标志是错误的参考所显示的期待的内容142无效的基地址一个sfr或sbit声明的基地址是错误的有效的基地址范围在0x80到0xFF之间如果用符号基地址^位号声明则基地址必须是8的倍数143无效的绝对位地址sbit声明中的绝对位地址必须在0x80到0xFF之间144基地址^位号无效的位号sbit声明中定义的位号必须在0到7之间145未知的sfr146无效sfr一个绝对位基地址^位号的声明包含一个无效的基地址标识符基地址必须是已经声明的sfr任何别的名称是无效的147目标文件太大单个目标文件不能超过6553564K字节-1149struct/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函数允许符号char*,…在alien函数中是非法的PL/M-51函数通常要求一个固定的参数表158函数包含未命名的参数一个函数的参数列表定义包含一个未命名的抽象类型定义这个符号只允许在函数原型中159void后面带类型函数的原型声明可包含一个空参数列表例如int func(void)在void后不能再有类型定义160void无效void类型只在和指针组合或作为一个函数的不存在的返回值中是合法的161忽视了正式参数在一个函数内一个外部函数的声明用了一个没有类型标识符的参数名列表例如extern yylex(a,b,c);180不能指向一个函数指向一个函数的类型是无效的尝试用指针指向一个函数181操作数不兼容对给定的操作符至少一个操作数类型是无效的例如~float_type183左值不能修改要修改的目标位于code存储区或有const属性因此不能修改184sizeof非法操作数sizeof操作符不能确定一个函数或位域的大小185不同的存储空间一个目标声明的存储空间和前一个同样目标声明的存储空间不同186解除参照无效一个内部编译器问题会产生本信息如果本错误重复出现请和技术支持接洽187不是一个左值所需的参数必须是一个可修改的目标地址188未知目标大小因为没有一个数组的维数或间接通过一个void指针一个目标的大小不能计算189&对bit/sfr非法取地址符’&’不允许对bit目标或特殊函数寄存器sfr190&不是一个左值尝试建立一个指针指向一个未知目标193非法操作类型193对ptr非法add/sub193对bit的非法操作193错误操作数类型当对一个给定的操作符用了非法的操作数类型时产生本错误例如无效的表达式如bit*bit ptr+ptr或ptr*anything这个错误信息包括引起错误的操作符下面的操作对bit类型的操作数是可行的赋值=OR/复合OR||=AND/复合AND&&=XOR/复合XOR^^=bit比较==!=取反~bit操作数可和别的数据类型在表达式中混用在这种情况类型转换自动执行194*间接指向一个未知大小的目标间接操作符*不能和void指针合用因为指针所指的目标的大小是未知的195*间接非法*操作符不能用到非指针参数196存储空间可能无效转换一个常数到一个指针常数产生一个无效的存储空间例如char*p=0x91234198sizeof返回零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的限制表达式中不能用类型void219long常数缩减为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或sfr245未知的pragma跳过本行#pragma状态未知所以整行被忽略246浮点错误当一个浮点参数超出32位的范围就产生本错误32位IEEE值的范围是±1.175494E-38到±3.402823E+38247非地址/常数初始化一个有效的初始化表达式必须是一个常数值求值或一个目标名加或减去一个常数248集合初始化需要大括号给定struct或union初始化缺少大括号{}249段<名>段太大编译器检测到一个数据段太大一个数据段的最大的大小由存储空间决定250\esc值超过255一个字符串常数中的转义序列超过有效值范围最大值是255252非法八进制数指定的字符不是一个有效的八进制数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。

KEIL常见编译错误大全

KEIL常见编译错误大全

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当写入列表文件,OBJ文件,或工作文件时遇到的错误.Errors‘(‘AFTER CONTROL E XPECTED一些控制参数需要用括号包含一个参数.当没有左括号时显示本信息.‘)’AFTER PARAMETER EXPECTED本信息表示包含没有参数的右括号.BAD DIGIT IN NUMBER一个控制参数的数字参数包含无效字符.只能是十进制数.CAN’T CREATE FILE在FILE行定义的文件名不能建立.CAN’T HAVE 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 LONG(32K)一个中间扩展长度超过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类型堆栈下溢类型声明堆栈下溢这个错误通常死错误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存储区不能在别的存储区运行函数默认定义为存储类型code135bit的存储类错bit标量的声明可能包含一个static或extern存储类register或alien类是无效的136变量用了voidvoid类型只允许作为一个不存在的返回值或一个函数的空参数列表voidfunc(void)或和一个指针组合void*138Interrupt()不能接受或返回值一个中断函数被定义了一个或多个正式的参数或一个返回值中断函数不能包含调用参数或返回值140位在非法的存储空间bit标量的定义可以包含可选的存储类型data如果没有存储类型则默认为data因为位通常在内部数据存储区当试图对一个bit标量定义别的数据类型时会产生本错误141临近标志语法错误期待别的标志…编译器所见的标志是错误的参考所显示的期待的内容142无效的基地址一个sfr或sbit声明的基地址是错误的有效的基地址范围在0x80到0xFF之间如果用符号基地址^位号声明则基地址必须是8的倍数143无效的绝对位地址sbit声明中的绝对位地址必须在0x80到0xFF之间144基地址^位号无效的位号sbit声明中定义的位号必须在0到7之间145未知的sfr146无效sfr一个绝对位基地址^位号的声明包含一个无效的基地址标识符基地址必须是已经声明的sfr任何别的名称是无效的147目标文件太大单个目标文件不能超过6553564K字节-1149struct/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函数允许符号char*,…在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目标或特殊函数寄存器sfr190&不是一个左值尝试建立一个指针指向一个未知目标193非法操作类型193对ptr非法add/sub193对bit的非法操作193错误操作数类型当对一个给定的操作符用了非法的操作数类型时产生本错误例如无效的表达式如bit*bit ptr+ptr或ptr*anything这个错误信息包括引起错误的操作符下面的操作对bit类型的操作数是可行的赋值= OR/复合OR||=AND/复合AND&&=XOR/复合XOR^^=bit比较==!=取反~bit操作数可和别的数据类型在表达式中混用在这种情况类型转换自动执行194*间接指向一个未知大小的目标间接操作符*不能和void指针合用因为指针所指的目标的大小是未知的195*间接非法*操作符不能用到非指针参数196存储空间可能无效转换一个常数到一个指针常数产生一个无效的存储空间例如char *p=0x91234198sizeof返回零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的限制表达式中不能用类型void219long常数缩减为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或sfr245未知的pragma跳过本行#pragma状态未知所以整行被忽略246浮点错误当一个浮点参数超出32位的范围就产生本错误32位IEEE值的范围是±1.175494E-38到±3.402823E+38247非地址/常数初始化一个有效的初始化表达式必须是一个常数值求值或一个目标名加或减去一个常数248集合初始化需要大括号给定struct或union初始化缺少大括号{}249段<名>段太大编译器检测到一个数据段太大一个数据段的最大的大小由存储空间决定250\esc值超过255一个字符串常数中的转义序列超过有效值范围最大值是255252非法八进制数指定的字符不是一个有效的八进制数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。

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

Keil C 编译器常见警告与错误信息的解决方法
解决方法将以data 型别定义的公共变量修改为idata 型别的定义
说明在编译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
说明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
MODULE: C:\8051\OSDM.OBJ (OS明data 存储空间的地址范围为0~0x7f,当公用变量数目和函数里的局部变量如果存
储模式设为SMALL 则局部变量先使用工作寄存器R2~R7 作暂存当存储器不够用时则会
以data 型别的空间作暂存的个数超过0x7f 时就会出现地址不够的现象
说明LedOn( )函数名称重复定义即有两个以上一样的函数名称

keil-错误

keil-错误

Keil - 错误Keil是一种嵌入式编程软件工具,使用Keil可以为各种微处理器、单片机和其他嵌入式系统编写程序。

Keil是由德国的Keil Elektronik GmbH开发的。

使用Keil 进行编程,是嵌入式系统开发和设计中必不可少的一部分。

但是,由于编程时可能会出现各种错误。

这篇文章主要讨论在Keil编程中可能会遇到的一些错误,以及如何解决这些错误。

错误1:无法打开源文件在一个Keil项目中,需要引用许多源文件。

如果某个源文件无法被Keil所找到,就会出现这个错误。

通常情况下,出现这个错误的原因可能是:•路径错误:源文件路径与Keil项目设置的路径不一致。

•源文件名称错误:源文件名称拼写错误或者大小写不一致。

•编译器版本问题:源文件与编译器版本不兼容。

解决这个问题的方法是,确认源文件的路径、名称和版本是否正确。

如果以上都没有问题,可以尝试重新导入该源文件并重新配置路径来修复该错误。

错误2:定义错误在Keil编程中经常使用定义宏。

这种宏是在程序中声明的,用于定义变量和表示常数。

如果定义错误,编译器就会报错。

通常情况下,出现这个错误的原因可能是:•宏定义语法错误:定义宏时如语法错误则会引发这个错误。

•宏常量类型错误:定义宏时常量类型错误会导致编译错误。

•宏名称重复:定义两个相同名称的宏定义引发这个错误。

解决这个问题的方法是,确认定义宏的语法是否正确。

确认宏类型是否正确,如果该宏名称重复了,在程序中更改为不同的名称即可。

错误3:语法错误语法错误通常是由书写错误引起的。

Keil编译器在程序中检测到错误语法时,会抛出一个编译错误。

通常情况下,出现这个错误的原因可能是:•拼写错误:源代码中有单词拼写错误。

•语法错误:在编写代码时,例如函数、变量或指针中存在语法错误。

•缺少括号:程序员可能忘记使用括号,即忘记使用括号表示优先级。

解决这个问题的方法是,仔细检查程序代码中存在的错误和拼写错误。

错误4:链接错误链接错误在编译器完成编译后出现,它意味着编译器无法将所有的目标文件链接在一起来生成可执行文件。

Keil编译常见错误

Keil编译常见错误

Error: L6200EError: L6200E: Symbol temp multiply defined (by wenshidu.o and main.o).在编译的时候出现了这个问题,但是检查不出来,希望各位大侠帮帮忙什么变量你给付了两次值你看看是不是那个外部变量你又给赋值了main.c申明,其他.c文件对应的.h文件中用extern引用error: #20error: #20: identifier "TIM2_IRQChannel" is undefined 谁能说说,哪里错了你的固件库里的库文件没有添加进工程里面,所以出现未定义的情况。

TIM2_IRQChannel指定时器2的中断通道没有定义,其实在固件库对这些参数都有定义,宏定义代替了一串寄存器地址数据。

需要将.C文件添加到工程文件中warning: #1-Dmain.c(7): warning: #1-D: last line of file ends without a newline当使用keil编译时,弹出这样的警告信息:main.c(7): warning: #1-D: last line of file ends without a newline这个是由于在main函数的“}”后,没有加回车。

只要在main函数的“}”后加回车键,此警告信息即可消除。

error:#65...test_menu.c(27):error:#65:expected a ";"分数送你了,问题在你回答之前已经解决了,头文件里的结构体定义里的最后一行没有加";" 如NB menu{..};error: #1113:折腾了大半天,才搞明白一个空操作的指令先在网上查有的说是__asm{NOP;},从intrins.h里调用,可犄角旮旯全找了,也没看到什么intrint.h的文件。

如果直接用,就出现error: #1113: Inline assembler not permitted when generating Thumb code最后搜索这条错误,知道是因为__asm("指令");这种语法是内联汇编(inline assembly)的语法。

Keil常见编译错误

Keil常见编译错误

Keil编译常见错误Part 1 Warningswarning: #167-D: argument of type "XXXX" is incompatible with parameter of type "YYYY"意义: 类型为XXXX的参数(实参)与类型为YYYY的参数(形参)不一致。

说明: 编译器在编译过程中会检查函数调用时的实参与形参数据类型的匹配情况。

当发现两者不一致时,给出警告。

warning: #177-D: variable "XXXX" was declared but never referenced. 意义: 定义的变量XXXX从未被使用过。

warning: #223-D: function "XXXX" declared implicitly意义: 函数XXXX采用了隐含式的声明。

说明: 函数XXXX在调用时没有定义或编译器没有看到该函数的声明,于是编译器将使用了缺省的数据类型作为该函数的定义。

常见问题:1.函数的定义出现在函数调用之后。

2.函数没有定义warning: #513-D: a value of type "XXXX" cannot be assigned to an entity of type "YYYY"意义: 类型为XXXX的值不能赋值给一个YYYY的实体。

说明: 按照C语言的规则,变量和数值都被赋予一定的数据类型。

在赋值操作时,变量的类型与其所赋的值的类型必须一致。

遇到这类问题时,要仔细观察和思考两者是否存在冲突。

常见问题:warning: #1295-D: Deprecated declaration XXXX - give arg types.意义: 弃用的声明XXXX, 请给出参数的数据类型。

说明: 按照最新C语言标准的要求,函数在声明时必须说明所有参数的类型,以及返回值的类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Keil编译常见错误
Part 1 Warnings
warning: #167-D: argument of type "XXXX" is incompatible with parameter of type "YYYY"
意义: 类型为XXXX的参数(实参)与类型为YYYY的参数(形参)不一致。

说明: 编译器在编译过程中会检查函数调用时的实参与形参数据类型的匹配情况。

当发现两者不一致时,给出警告。

warning: #177-D: variable "XXXX" was declared but never referenced. 意义: 定义的变量XXXX从未被使用过。

warning: #223-D: function "XXXX" declared implicitly
意义: 函数XXXX采用了隐含式的声明。

说明: 函数XXXX在调用时没有定义或编译器没有看到该函数的声明,于是编译器将使用了缺省的数据类型作为该函数的定义。

常见问题:
1.函数的定义出现在函数调用之后。

2.函数没有定义
warning: #513-D: a value of type "XXXX" cannot be assigned to an entity of type "YYYY"
意义: 类型为XXXX的值不能赋值给一个YYYY的实体。

说明: 按照C语言的规则,变量和数值都被赋予一定的数据类型。

在赋值操作时,变量的类型与其所赋的值的类型必须一致。

遇到这类问题时,要仔细观察和思考两者是否存在冲突。

常见问题:
warning: #1295-D: Deprecated declaration XXXX - give arg types.
意义: 弃用的声明XXXX, 请给出参数的数据类型。

说明: 按照最新C语言标准的要求,函数在声明时必须说明所有参数的类型,以及返回值的类型。

当函数没有输入参数或者返回值时,应该使用void来加以说明。

例如: LED_Config()。

正确的声明方式应该写成void LED_Config(void)
Part 2 Compiling Errors
error: #20: identifier "XXXX" is undefined
意义: 标识符XXXX没有定义。

说明: 按照C语言的要求,任何标识符(变量、函数、自定义数据类型等等)都必须先定义再使用。

常见问题:
1.变量没有定义就使用了;
2.变量的拼写错误(大小写、形状相似的字母或数字)导致编译器认为是不同的标识符;
3.使用宏定义的类型,但没有包含宏定义所在的头文件;
error: #159: declaration is incompatible with previous "XXXX" (declared at line NNNN).
意义: 函数XXXX调用时的方式与编译器之前看见的定义或者声明不一致。

括号中提示了定义或者声明的位置(第NNNN行)。

说明:
常见问题:
error: #247: function "XXXX" has already been defined.
函数XXXX已经定义了。

一个文件中,出现两个或以上的相同名称的函数定义。

error: #268: declaration may not appear after executable statement in block
变量定义不应该出现在执行语句之后。

按照C语言的要求,变量的定义应该出现在执行语句之前,无论是函数内的临时变量,还是文件中的全局变量。

Part 3 Link Errors
Error: L6200E: Symbol XXXX multiply defined (by YYYY.o and ZZZZ.o). 意义: 符号XXXX多次定义(定义分别在文件YYYY.o和ZZZZ.o中)。

说明: C语言要求变量名或函数名在其有效的范围内必须唯一。

常见问题:
在头文件中定义变量,导致包含该头文件的.C文件都出现该变量。

在多个文件中包含了相同的函数体。

C语言不允许多态的函数。

Error: L6218E: Undefined symbol XXXX (referred from YYYY).
意义: 符号XXXX未定义(文件YYYY引用了该符号)。

说明: 在链接时,所有被引用的变量或者函数必须都出现在工程中。

这些函数可以定义在某个文件里,或者在库函数中。

常见问题:
1.函数只有声明(通常在某个头文件中),但工程文件中没有该函数的定义。

2.在YYYY中说明的全局变量XXXX, 并未在工程文件的其他文件中找到。

3.函数XXXX所在的文件没有加入到工程文件中,编译器无法找到。

相关文档
最新文档