单片机编译错误记录之(*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS.)

本文分析了编程中出现ERRORL104错误的两种情况:extern使用不当导致的变量重复定义和函数名/变量名大小写不敏感。提供了对应解决策略和实例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果在编程中出现(*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS.)这类错误,应该有俩种情况(本人遇到过俩种)一起看看吧。

1.错误示例如下

2.错误解释

该报错是指,多个公共定义,意思是,一个变量或者函数重复定义了

3.解决方法

情况一:关于extern的使用

下面有一个具体例子:

这种情况就会报*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS.这个错误,原因是extern使用不当,当我们使用extern外部变量声明的时候,只需要对该变量进行定义就好了,不能对该变量进行初始化,通俗来说就是不能够修改它的初值,毕竟它不属于你这个文件。

情况二:函数名和变量名“重复”

我们继续看一个例子(也是我刚刚编程遇到的):

当时就很奇怪,也是找半天没发现哪重复定义了,后来仔细一想,我定义了一个变量时main_display,还有一个函数Main_Display(),这个报错显示的是SYMBOL:MAIN_DISPLAY,会不会是无法区分大小写,后来查了一下,发现是真的无法区分大小写,当时没改变量名只是想为了好区分函数里面的变量。后来改了个变量名字就解决了。如下图所示:

Build target 'Target 1' linking... *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: WEEKDAYS MODULE: TimerCount.obj (TIMERCOUNT) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: MONTHDAYS MODULE: TimerCount.obj (TIMERCOUNT) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_TIME MODULE: TimerCount.obj (TIMERCOUNT) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_DATE MODULE: TimerCount.obj (TIMERCOUNT) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: WEEKDAYS MODULE: UART.obj (UART) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: MONTHDAYS MODULE: UART.obj (UART) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_TIME MODULE: UART.obj (UART) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_DATE MODULE: UART.obj (UART) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: WEEKDAYS MODULE: ExternalHandler.obj (EXTERNALHANDLER) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: MONTHDAYS MODULE: ExternalHandler.obj (EXTERNALHANDLER) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_TIME MODULE: ExternalHandler.obj (EXTERNALHANDLER) *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: DAY_DATE MODULE: ExternalHandler.obj (EXTERNALHANDLER) *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?TIMEADD?TIMERCOUNT *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?UART LENGTH: 003AH *** ERROR L107: ADDRESS SPACE OVERFLOW SPACE: DATA SEGMENT: ?DT?EXTERNALHANDLER LENGTH: 003AH *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: WEEKDAYS SEGMENT: ?DT?UART *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: MONTHDAYS SEGMENT: ?DT?UART *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: DAY_TIME SEGMENT: ?DT?UART *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: DAY_DATE SEGMENT: ?DT?UART *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: WEEKDAYS SEGMENT: ?DT?EXTERNALHANDLER *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: MONTHDAYS SEGMENT: ?DT?EXTERNALHANDLER *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: DAY_TIME SEGMENT: ?DT?EXTERNALHANDLER *** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT SYMBOL: DAY_DATE SEGMENT: ?DT?EXTERNALHANDLER Program Size: data=241.0 xdata=0 code=827 Target not created什么意思
最新发布
07-20
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值