这个问题一直烦了我很久,使用C51 keil进行.c文件链接的时候,老是报错诸如下面的信息:
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: aa MODULE: brightnessCTRL.obj (BRIGHTNESSCTRL) DEFINED: LED_Screen.obj (LED_SCREEN)但是我发现,我确实只定义了一个这样名称的变量
其实这一点在arm keil中不会出现,arm keil的宽容度要好得多。
经过探索,我总结以下经验:
1. .h文件中可以包含宏定义(#define)、不知道叫啥(typedef)、函数的声明、sbit、变量的声明(extern),绝不能包含变量的定义。
2. 根据第一点,我们可以把变量定义放在子.c文件中,.h文件中用extern。sbit直接在.h中声明(这里用定义还是声明不好说)
3. #include<>其实是可以包含.c文件的,如#include<XX.c>
4. 根据第三点,我们可以把子.c文件包含在有main函数的主.c文件中。而子.c和主.c文件都要用的.h文件可以一并写在子.c中。这样可以省略写.h文件,就能链接多个.c文件