keil 4编译C51程序出现警告:UNRESOLVED EXTERNAL SYMBOL SYMBOL: DATA 求解释。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil 4编译C51程序出现警告:UNRESOLVED EXTERNAL SYMBOL SYMBOL: DATA 求解释。相关的知识,希望对你有一定的参考价值。

linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: DATA
MODULE: ck test.obj (CK_TEST)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: DATA
MODULE: ck test.obj (CK_TEST)
ADDRESS: 0099H
Program Size: data=19.0 xdata=0 code=521
creating hex file from "ck test"...
"ck test" - 0 Error(s), 2 Warning(s).

谢谢!

参考技术A ***警告L1:无法解析的外部符号
数据符号:
模组::test.obj对照(CK_TEST)
***警告L2:未解决的外部参考
数据符号:
模组::test.obj对照(CK_TEST)
地址:0099H
程序大小:数据=19.0 XDATA=0代码= 521
创建hex文件从“CK测试”...
“对照试验” - 0错误(次),2个警告。

建议把程序贴出来,我给你分析一下吧。追问

好像找到原因了,我定义了一个动态数组Data[ ],把这个改成固定长度的就不报错了。是不是C51中不能定义动态的数组啊?我记得以前见过在程序中这么定义的啊

追答

数组动态可以的啊,

追问

我记得以前也见过这么用的,可是当我把定义的时候Data[ ]改成Data[2]就没问题了,什么原因?

追答

哎吆你会不会定义数组的啊, Data[4]; 就等这样定义的啊,Data[] 这是什么意思语法错误这样写就不是数组了。

追问

晕,我还不知道怎么定义吗,我不是为了方便,直接打上的数组名啊,只是表达这个意思,变量类型符我没打上,我想你们应该知道我的意思。再说了,要是直接写Data[] ,编译器早就报错了,还警告个毛啊

追答

那你知道了你还问什么啊,我想知道你编译报错你的数组是怎么写的

参考技术B 常量数组的话,可以定义成DATA[],但如果是变量数组,那还是必须指定长度的。因为51资源很有限,和PC程序的资源完全不是一个数量级,所以KEIL必须在链接时分配好,如果没有明确的数值,KEIL就傻眼了。
如果你实在不能确定,那干脆定义一个指针算了。

Keil科普教程 | Keil C51 和 MDK 的区别

Keil科普教程 | Keil C51 和 MDK 的区别

(点击链接阅读原文)

以上是关于keil 4编译C51程序出现警告:UNRESOLVED EXTERNAL SYMBOL SYMBOL: DATA 求解释。的主要内容,如果未能解决你的问题,请参考以下文章

keil c51编译器怎么有的文件出错时,双击错误提示没有定位到错误行,有的文件就可以,怎么回事

keil C51中函数调用无法正确返回怎么回事

keil警告怎么办?

KEIL C51程序中如何嵌入汇编

keil uvision5 已提示破解成功,怎么还有2K限制

keil for c51 keil for arm 怎么才能同时使用