【已解决】C51 *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS

本文探讨了一种在C语言编程中常见的错误——多次公共定义,特别是涉及到extern关键字时。在main.c文件中,一个数组被定义并初始化,而在DS1302.C文件中,相同的数组再次被extern声明但未定义,导致编译错误‘MULTIPLE PUBLIC DEFINITIONS’。解决方法是删除main.c中的数组定义,只保留extern声明。这样,外部文件中的数组定义将被正确引用,消除编译错误。
摘要由CSDN通过智能技术生成

  • 出现的问题

 如图实在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中均不会报错。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值