最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Keil常见编译错误

IT圈 admin 38浏览 0评论

2024年3月8日发(作者:朋紫雪)

南京大学金陵学院 V0.1

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语言的要求,任何标识符(变量、函数、自定义数据类型等等)都必须先定义再使用。

常见问题:

by James Ho in Nov. 2013

南京大学金陵学院 V0.1

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所在的文件没有加入到工程文件中,编译器无法找到。

by James Ho in Nov. 2013

2024年3月8日发(作者:朋紫雪)

南京大学金陵学院 V0.1

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语言的要求,任何标识符(变量、函数、自定义数据类型等等)都必须先定义再使用。

常见问题:

by James Ho in Nov. 2013

南京大学金陵学院 V0.1

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所在的文件没有加入到工程文件中,编译器无法找到。

by James Ho in Nov. 2013

发布评论

评论列表 (0)

  1. 暂无评论