- 出现的问题
如图实在main函数里面定义的一个数组(取名main.c)
#include <REGX52.H>
#include "LCD1602.h"
#include "DS1302.h"
unsigned char second,minute;
extern unsigned char DS1302_Time[]={22,8,8,11,6,55,1};
下面是在另外一个.c文件中定义的相同数组,(取名DS1302.C)
#include <REGX52.H>
sbit DS1302_CE = P3^5;
sbit DS1302_SLCK = P3^6;
sbit DS1302_IO =P3^4 ;
#define DS1302_SECOND 0X80
#define DS1302_MINUTE 0X82
#define DS1302_HOUR 0X84
#define DS1302_DATE 0X86
#define DS1302_MONTH 0X88
#define DS1302_DAY 0X8A
#define DS1302_YEAR 0X8C
#define DS1302_WP 0X8E
extern unsigned char DS1302_Time[]={22,8,8,11,6,55,1};
接下来就是报错:MULTIPLE PUBLIC DEFINITIONS
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: DS1302_TIME
MODULE: .\Objects\DS1302.obj (DS1302)
原因
涉及此次问题原因在于extern,extern的主要用途在于:你已经在别的文件中(如文中的DS1302.C)定义了这么一个数组或者变量,但是在现在这个文件(如main.c)仍然需要使用,那么就需要extern 来说明,当用extern来说明时,不需要对数组或者变量进行定义,仅说明即可。
- 解决方法
所以针对本文的解决方式:
1.将main.c中的extern unsigned char DS1302_Time[ ] = {22,8,8,11,6,55,1};
修改为extern unsigned char DS1302_Time[ ] ;即可
附:原来文件中的(本文中DS1302.c)extern 写或者不写在keil5中均不会报错。