Keil中ERROR:MULTIPLE PUBLIC DEFINITIONS的解决

Keil中MULTIPLE PUBLIC DEFINITIONS错误的处理

  • 错误解释
    • 报错含义
    • 纠错思路
    • 举例解释
  • 代码实现
    • MotorControl.c
    • MotorControl.h
    • LED.c
    • LED.h
  • 总结
    • 用 ~~文字~~ 人话解释
    • 警告

第一次用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这个变量在别的源文件中调用赋值时产生的定义声明问题,并不能单独运行。

你可能感兴趣的:(Keil,心得,#,51内核单片机,嵌入式,keil,mdk)