在做项目开发时,在一个单片机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。

注意:全局变量才能被外部引用,静态变量和局部变量不行的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
单片机
+关注
关注
6078文章
45636浏览量
675926 -
C语言
+关注
关注
183文章
7650浏览量
146529 -
静态变量
+关注
关注
0文章
13浏览量
6892 -
extern
+关注
关注
0文章
7浏览量
3205
发布评论请先 登录
相关推荐
热点推荐
C语言中不建议使用的关键词
我们在学校学习或者有参加过C语言培训的话,应该都听说过“不建议使用goto语句”。但是,一般不会有人告诉你为什么不建议使用goto语句,类似于这种存在但不建议使用的关键词还有很多。
发表于 09-08 14:18
•2102次阅读
c语言和单片机遇见的小注意事项
c语言和单片机遇见的小注意事项(会长期更)c语言中1.定义字符串char str[30]="abcdefg";[30]预存空间不可以忘记2.
发表于 12-09 07:23
VHDL语言中信号的不同形式设置
摘要: 通过一个偶同位产生器逻辑功能的实现过程,介绍了VHDL语言中信号设置的不同方 式及注意事项,并给出了完整的程序代码。 关键词: VH
发表于 10-06 08:48
•1681次阅读
C语言中的typedef的用法
在以前的学习中对于C语言中typedef和define的认识是,#define是宏,作用是简单的替换,而typedef也是替换,只不过比define高级的是在替换的时候会进行语法检查。但是后来
发表于 01-13 13:36
•0次下载
C语言中__attribute__ 关键字的用法
嵌入式开发,离不开 C 语言,C语言中有很多语法会直接或间接影响你代码的质量,下面就来讲讲__attribute__ 关键字的
发表于 10-19 09:06
•1.5w次阅读
C语言中关键词extern用法的一个注意事项
评论