欢迎访问恒学熙 > 南京培训学校 > 南京达内教育

7*24小时服务热线:400-651-9527

当前位置: 南京达内教育 > 优惠资讯 > 南京嵌入式工程师不要乱用全局变量

南京嵌入式工程师不要乱用全局变量

作者:南京达内教育 关注:1057 | 更新: 2021-11-20

作为一个嵌入式工程师,有前人提示过你不要滥用全局变量,就在之前丰田公司就出过这么一档子事儿,某位软件工程师因使用超过10000 个全局变量,在法庭上被“喷”是“一坨”代码。

在工程实践中,总共采用5个或10个全局变量,这都是 OK 的,但一次性使用10000个那就很可怕了,这是不安全的,因为一次性查看10000个全局变量以后,才能知道哪里出了问题,那么到底啥是全局变量,该怎么使用,让我们接下来学习一下。

1、啥是全局变量

说起全局变量,就不得不提到“全局变量,局部变量,静态全局变量,静态局部变量”,这些都是编程语言中的基本概念。变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

从作用域看:

全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化到程序与你新内阁结束都一直存在,他和全局变量的区别在于全局变量对函数都是可见的,而静态局部变量只对定义自己的函数体可见。

局部变量也只有局部作用域,他是自动对象,他在程序运行期间不一直存在,而是只在函数执行期间存在,函数的一次调用结束后,变量就被撤销,其所占用的内存也被收回。

静态全局变量也具有全局作用域,他与全局变量的区别在于如果程序包含多个文件的话,他作用于定义它的文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同的静态全局变量,他们也是不同的变量。

从分配内存空间看:

全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上没有什么不同。区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有用的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有用,在同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

1、静态变量会被放在程序的静态数据存储区里,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是他与堆栈变量和堆变量的区别

2、变量用static告知编译器,自己仅仅在变量的作用域范围内可见。这一点是他与全局变量的区别。

从以上分析可以看出,把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的。

简单来说就是:

全局变量:在整个工程文件内都有用;“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有用。由于同一文件中的函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值, 就能影响到其他函数中全局变量的值。

静态全局变量:只在定义它的文件内有用,作用和全局变量一样,不过就在本文件内部;

静态局部变量:只在定义它的函数内有用,只是程序仅分配一次内存,函数返回后,该变量不会消失;静态局部变量的生存期虽然为整个工程,但是其作用仍与局部变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

局部变量:在定义它的函数内有用,但是函数返回后失效。“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有用。

注意:全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

静态局部变量与全局变量的区别就在于:全局变量在其定义后函数都能用,但是静态局部变量只能在一个函数里面用。


我们为您提供如下全套教学服务

丰富的选择,全面的指导,让你学习乐在其中