16. ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: K
MODULE: 222.obj (222)
出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c 文件就不需要初始化过程啦
17*** ERROR L121: IMPROPER FIXUP
访问内存指令超出指令的寻址范围了,例如MOVX @Ri 指令超出了PDATA段的范围,或者是ACALL 指令超出了2k的寻址范围.
检查你的调用子函数的命令.特别是那些LCALL,ACALL等
18*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: MAIN
MODULE: C:\KEIL\C51\LIB\C51S.LIB (?C_INIT)
ADDRESS: 080DH
在main函数里面C_INIT这个参数有使用,没有申明。或者申明了没有实体。也就是说对于这个参数,编译器无法解析。
19 keil4 warning C316:unterminated conditionals
今天用Keil4写程序时遇到这个问题:warning C316:unterminated conditionals
跑了几个论坛,在审视了一遍代码之后,知道了原因:
像类似XX.C(99):warning C316:unterminated conditionals这种警告的话XX.c文件有一个凌乱的条件编译或预编译。因为C语言中有些头文件中的预编译或宏定义,那么条件编译就避免不了。写条件编译时,可能有忘写一个基本的语句。比如说,你用了条件编译#ifndef而忘记写#endif。因为他们本来就是配套的。有前者必有后者。不能丢掉其中任何一个。一个include文件最后的#endif 少了# 前缀或者没有#endif,都会出现类似警告。就像你写C语句,你不会写了int i 而不能忘记写" ; " ,否者就不能把一个语句表达完整。
总之,出现上述问题。先看看整个C文件中是否出现上述错误,或整个工程中自己写的那些头文件中里面的条件编译是否都写对了,即:前面写了#ifndef,后面是否有对应的#endif。
20 DS1302.C(86): error C183: unmodifiable lvalue
code的内容只能读,不能改. 定义数组时把code去掉。