1819|0

6809

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

嵌入式C编程中的全局变量重复声明问题 [复制链接]

     用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文件中定义的全局变量。


注意声明和定义不一样,定义会分配变量空间,而声明的话就不再分配空间,只是告诉编译器,这个变量在别的地方,我只是使用它。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表