全局变量的声明和定义的问题

来源:本站
导读:目前正在解读《全局变量的声明和定义的问题》的相关信息,《全局变量的声明和定义的问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《全局变量的声明和定义的问题》的详细说明。
简介:本文介绍了全局变量的声明和定义是容易错误的问题以及全局变量使用的建议。

全局变量:不管是经典的还是普通的,就是一条规矩:不要在头文件里定义变量,局部变量也不要。

如:delay.h中定义的int i;

如果delay.c中包含的delay.h,在其他的文件中也包含的delay.h,那么就出现重复定义,解决方法在delay.h中将 extern int i; 定义外部申明变量,然后在需要用.c文件中定义。如 delay.c 中定义int.i;

这就是声明和定义的区别;

定义是要具体分配内存的,而声明仅仅是告诉编译器,当遇到声明的变量时可以到其它文件查找。

比如有两个文件A.c和B.c,在A中定义了一个全局变量int i,在B中也定义该变量,那么在连接时就会出现重复定义的错误。但是B中也需要A中的i这个全局变量,所以要在B中用extern int i;进行声明,再使用,这时连接的时候,遇到i就会自动到A中去找。

extern关键词在函数声明的时候,可以省略,所以在使用时要区分是定义还是声明。下面是对全局变量使用的一些建议:

1.全局变量要少用,能不用就不用;

2.在主程序外面只对全局变量做声明,不做定义;

3.使用中断时,要加上使用的寄存器组;

4.裸露的全局变量全部用结构体封装起来;

5.中断与主程序共享全局变量,用函数(含临界段)封装起来;

6.使用全局变量出错时,可以给它指定一个地址(注意:不要和当前使用的寄存器组发生冲突);

7.将大部分全局/静态变量(特别是数组)定义到xdata段中;

8.有些变量可能会随时改变,例如:在中断中赋值的变量,以及硬件修改的输入/输出寄存器等,在程序中使用这些变量时,最好加上“volatile”关键词,告诉C51编译器:

(1)不要优化该变量,例如相连的两个相同的赋值语句,第二个不要优化掉,因其处于不同“时刻”赋值结果可能不一样。

(2)每次取该变量值时要从其实际地址的寄存器取,不要从内存的副本中取,因其值可能随时比改变了。

提醒:《全局变量的声明和定义的问题》最后刷新时间 2024-03-14 01:03:44,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《全局变量的声明和定义的问题》该内容的真实性请自行鉴别。