Keil常见编译错误
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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所在的文件没有加入到工程文件中,编译器无法找到。