Keil中ERROR:MULTIPLE PUBLIC DEFINITIONS的解决

本文详细介绍了Keil编译器出现'MULTIPLE PUBLIC DEFINITIONS'错误的原因和处理方法。错误源于多个文件中对同一变量的重复定义。解决思路是在正确的位置进行定义和声明,例如在.c文件中定义,在对应的.h文件中声明。通过示例代码展示了如何在MotorControl.c、MotorControl.h、LED.c和LED.h文件中正确处理MotorWorkOnFlag变量,避免重复定义。同时,提醒在声明时不应赋值,防止其他报错。


第一次用Markdown写点东西,所以在内容结构和节奏上不如以往简洁,为了节约大家获取信息的效率,可以通过目录直接跳转去对应的部分看相应的内容。

错误解释

报错含义

多个文件中变量的重复定义

纠错思路

正确且合理地方源文件中进行正确合理且不重复的定义或声明。

举例解释

比如说,用LED的颜色和闪烁频率来表示电池电量的不同状态以及电机的运转状态。
涉及到的文件起码包括LED.cMotorControl.c及其对应的 .h 文件和main.c文件。

我用白色LED的点亮来表示电机运转中,需要将MotorWorkOnFlag这一变量当做点亮LED的判断条件。那么变量的定义和声明将如何在相关源文件中合理且正确的体现,请参照下面的代码段。

代码实现

MotorControl.c

// MotorControl.c
#include "MotorControl.h"
unsigned char MotorWorkOnFlag = 0;

MotorControl.h

// MotorControl.h
#ifndef _MOTORCONTROL_H
#define _MOTORCONTROL_H
extern unsigned char MotorWorkOnFlag ;
#endif

LED.c

// LED.c
#include "LED.h"

void WhiteLEDWorkOn()
{
	if(MotorWorkOnFlag == 1)
	{
		P10 = 0;
	}
}

LED.h

//LED.h
#ifndef _LED_H
#define _LED_H
extern unsigned char MotorWorkOnFlag;
void WhiteLEDWorkOn();
#endif

总结

文字 人话解释

1 在产生定义的.c文件中定义,在其对应的.h文件中进行声明。
2 在使用的.c文件对应的.h文件中进行声明。

警告

1 在声明的时候不要进行赋值,否则会有另一个报错:multiple initialization即重复初始化。
2 这几个代码片段只是为了解释MotorWorkOnFlag这个变量在别的源文件中调用赋值时产生的定义声明问题,并不能单独运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值