C语言文件包含一问

2019-07-24 13:34发布

大家新年好,请问有亲们可以帮忙看看这个程序问题出在哪里,为什么会出现 .ObjHMI_M3DEMO.axf: Error: L6200E: Symbol i multiply defined (by a_driver.o and main.o). 的错误?
KEIL_DEMO_STM32.rar (1.8 MB, 下载次数: 37) 2018-2-22 17:53 上传 点击文件名下载附件


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
mack13013
1楼-- · 2019-07-24 19:04
本帖最后由 mack13013 于 2018-2-22 18:42 编辑

在a_driver.c和main.c中都有i这个全局变量,两个i重定义了。这个无法通过在a_driver.h中添加唯一编译宏来避免。

看了一下你的项目,发现你在头文件里定义了一个uint8 i;,在某个源文件里引用了外部全局变量i(比如在stm32f10x_it.c中有extern uint8 i;),

实际上你用反了,一般是在源文件(就是文件名xxxx.c的文件)中定义变量(比如此例中可以在a_driver.c中如下定义uint8 i;),然后在头文件(xxxx.h)中表明这个变量是外部变量(本例中可在a_driver.h中做extern uint8 i;声明),
然后在任何一个用到全局变量的源文件(比如main.c文件)中只要包含头文件(本例中a_driver.h)即可使用全局变量(本例中的i)。
foodyou
2楼-- · 2019-07-24 23:58
这个编译器是有说明,只有一个i在a_driver.c中,main里面应该没有i变量,那个i是在stm32f10x_it.c中,但是已经声明为extern了,所以推测是文件包含的问题。只是不知道是哪里出现问题了 。。。
foodyou
3楼-- · 2019-07-25 03:37
mack13013 发表于 2018-2-22 18:27
在a_driver.c和main.c中都有i这个全局变量,两个i重定义了。这个无法通过在a_driver.h中添加唯一编译宏来避 ...

原来是这样。。。我把a_driver.h里面的变量i搬到a_driver.c就没有问题了,哈,谢谢你,我会再想想是哪些概念搞错了。。。

一周热门 更多>