您的位置:首页 > 编程语言

嵌入式C编程中的全局变量重复声明问题

2017-12-15 10:11 579 查看
用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。比如在子函数led.c的头文件led.h中声明了一个全局变量int
i,而led.h即包含在main.c中,又包含在led.c中,所有有些人就天真的认为,这样就可以正常使用,但你编译的时候,就会出现如下报错:

..\OBJ\test.axf: Error: L6200E: Symbol TimingDelay multiply defined (by systick.o and main.o).

也就是说编译器认为我们重复定义了i这个变量。这是因为#include命令就是原封不同的把头文件中的内容搬到#include的位置,所以相当于main.c和led.c中都执行了一次int
i,而C语言中全局变量是项目内(或者叫工程内)可见的,这样就造成了一个项目中两个变量i,编译器就认为是重复定义。

正确解决的办法如下:

(1)main.c

#include"led.h"

int i;          //定义一个全局变量

(2)led.c

#include"led.h"

extern int i;//申明这个变量为外部变量,是在其他的c文件中定义的全局变量。

注意声明和定义不一样,定义会分配变量空间,而声明的话就不再分配空间,只是告诉编译器,这个变量在别的地方,我只是使用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: