今天碰到keil C编译总是提示“MULTIPLE PUBLIC DEFINITIONS”,即全局变量重复定义。全部文件搜索了一遍,发现只在头文件定义了一次,就是多引用了几次,感到很是奇怪。网上查了一下,才知道全局变量在keil中不是随便引用的。
要想正确编译,有两种方法:
一是在.c文件中定义,其余的.c文件使用的时候用extern定义一次即可。
例如 A.c中定义
uint16_t count; // 此处定义
B.c
extern uint16_t count; //此处声明为外部定义,并引用
第二种方法是
A.c中定义
uint16_t count; // 此处定义
A.h中声明
extern uint16_t count; //此处声明,一定要加extern
B.c中引用
#include “A.h” // 这样可以直接引用
推荐用第二种方法,适用于多文件引用,并便于管理,必须需要修改文件类型的时候只需要修改两处就行了。