博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全局变量的危险
阅读量:5890 次
发布时间:2019-06-19

本文共 1014 字,大约阅读时间需要 3 分钟。

     对于新手来说,有一点非常讽刺,那就是当我们这些新手认为某些特性很有用而大量使用时,往往那些经验丰富的程序员都会非常谨慎的对待。像是全局变量,很多新手都非常喜欢(我倒是谈不上喜欢或讨厌),因为它的作用域是整个源文件,整个程序的各个部分都可以使用,于是我们就不需要将它们作为参数传递给函数。但是,就是因为程序中的各个部分都可以随意使用它,才使得全局变量存在很大的风险:假设这种情况,当我们的程序因为一个变量的错误赋值而出现问题时,如果是某个函数的局部变量,我们只需要在该函数的可见域里面找问题,但是如果是全局变量呢?那么问题就可能出现在整个程序中任何地方了。所以,最好的做法就是避免使用全局变量,如果我们的程序中有一个以上的全局变量,我们就需要认真斟酌,其中是否有些根本就不需要声明为全局变量呢。

      这里又有一个新的疑问,好吧,我可以不使用全局变量,但是这样全局变量还有意义吗!!当然有,而且意义很大。全局变量最根本作用就是作为模块函数调用间的内部状态。什么是内部状态呢?举个例子,如果现在我正在写一个图形库,里面每条线都是从上一条线的结束处开始,那么我们就必须记录这个结束处作为内部状态的一部分。可以这样认为,内部状态就是各个函数调用间的通信,当这个状态因为某个函数而改变时,会使另一个函数调用开始发挥作用。局部变量根本不能作为内部状态,因为它的作用域只是它所声明的函数,函数一旦结束,它所存储的值也就丢失。但是,这时使用全局变量依然并不代表我们的程序是安全的,全局变量的危险依然存在。所以,这时我们就要使用static来修饰全局变量,使它的链接性变为内部。这种情况对于多模块的程序来说尤其重要,因为全局变量对于这个文件都是可见的,所以如果没有static,那么任何模块都可以使用,而且不能声明一个重名的变量,但是我们知道,实际开发中,是不同人进行不同模块的开发的,彼此间对于变量名的使用是不知道的,所以名称冲突是随时会发生的,尤其是对于同一个问题的开发。使用static,就可以避免这种冲突,因为static全局变量只对于所声明的模块是可见的,只可以在所声明的模块中使用,其他模块无法使用,所以其他模块是可以声明一个重名的变量的。虽然static在很多程序语言中的意义是说明对象是如何存储的,但是它的使用意义却更接近于private。

      所以,如果我们使用一个全局变量,请在前面加上static,这样就可以避免一些我们不知道的错误。

转载地址:http://dpysx.baihongyu.com/

你可能感兴趣的文章
SQL Denali-FileTable
查看>>
C# 图像处理:复制屏幕到内存中,拷屏操作
查看>>
PHP微信支付流程
查看>>
linux下单节点oracle数据库间ogg搭建
查看>>
swift三方库
查看>>
杭州之行
查看>>
oracle ORA-00917: missing comma 是因为少逗号
查看>>
策略模式简介
查看>>
UIViewController中loadView的用法(应当注意的几点)
查看>>
POJ NOI0105-42 画矩形
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
entity framework 6 通用数据类
查看>>
读取FTP上的excel文件,并写入数据库
查看>>
vs2008快捷键极其技巧 转载
查看>>
window 7上安装Visual Studio 2017失败的解决方法
查看>>
JavaScript 正整数正则表达式
查看>>
单元测试之Stub和Mock
查看>>
【转】Java泛型-类型擦除
查看>>
PredictionIO+Universal Recommender快速开发部署推荐引擎的问题总结(2)
查看>>