在做项目开发时,在一个单片机C语言程序(用keil开发)中,如果有两个C文件,在其中一个C文件(设为a文件)定义了一个全局变量v,并在此文件里的程序段里修改此变量,在另外一个C文件(设为b文件)里用外部变量(extern)的方法引用此变量,并读取变量v,但是,在b中读取时结果变量v出错,出现乱值。
什么原因?
v在b文件里作为外部变量,被认为分配的地址在其他地方,在b文件里只是读取没有写入,实际就没有分配内存地址,从而出错。
怎么修改?
方法1,在b文件中定义此变量v,在a文件中用外部变量的方式引用变量v,在a文件里修改变量v,在b文件中回读变量v,结果正常。
这样,在b文件里定义了变量v,分配了内存地址,在a文件中引用外部变量v并进行了写入操作,也分配了内存地址,所以不出错。
方法2,最优方法,在一个c文件(如a.c)里定义全局变量v,在其h文件(a.h)里再引用为外部变量,在用到变量v的其他c文件里include a.h,这样的话不管是否读写都无问题。当然,a.c里也要include a.h。
注意:全局变量才能被外部引用,静态变量和局部变量不行的。
-
单片机
+关注
关注
6044文章
44632浏览量
639404 -
C语言
+关注
关注
180文章
7616浏览量
138007 -
静态变量
+关注
关注
0文章
13浏览量
6689 -
extern
+关注
关注
0文章
7浏览量
2969
发布评论请先 登录
相关推荐
C语言中不建议使用的关键词
c语言和单片机遇见的小注意事项
VHDL语言中信号的不同形式设置
![VHDL<b class='flag-5'>语言中</b>信号的不同形式设置](https://file1.elecfans.com//web2/M00/A6/07/wKgZomUMO1-AJGneAAAUkxihzGI065.jpg)
C语言中的typedef的用法
![<b class='flag-5'>C</b><b class='flag-5'>语言中</b>的typedef的<b class='flag-5'>用法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论