static与全局变量

来源:互联网 发布:耳环 淘宝代理 编辑:程序博客网 时间:2024/04/29 13:21

一、普通全局变量

    普通的全局变量也称外部变量,在一个程序工程中,全局变量是整个工程都可见的,也就是说只需要在工程内的某一个文件内定义全局变量一次,在其他文件内都是可见的。其实说到全局变量,就必须涉及到两个概念:定义和声明。如果理解了定义和声明的关系,那就很好理解全局变量了。

    变量定义使用“数据类型+变量名称”的形式,编译器需要给他分配内存单元的;

    变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部c文件中定义,我这里只是在外部用它。编译器就不给他分配内存空间,而等到真正遇到变量定义的时候再给他分配内存空间。

    所以说:在我们使用普通全局变量时,其实我们的初衷时能在整个工程内都能直接引用该全局变量,所以这里就只需要记住我们的全局变量只能定义一次,你可以把这一次定义的机会给工程内的任意一个源文件(.cpp或.c文件),然后你可以在其他文件中任意声明这个变量多少次。

    另外:我们一般不再头文件中定义全局变量,你倒是可以声明全局变量(即加extern关键字)


二、static全局变量

    刚刚说了,普通全局变量也叫外部变量,那么加了static关键字的全局变量我们就可以称为“内部”变量,这里的“内部”指的是static全局变量的作用域范围,“内部”作用域是指变量所在的文件作用域,也就是说static全局变量的作用域仅限于所在文件内部,工程内的其他文件不可见。由于static关键字已经把普通全局变量“内化”了,所以static全局变量是不能用extern声明的,即extern和static组合使用会报错(博友可以自己在VS编译环境中测试)。其实这也就是static关键字的最大用处:隐藏,即把全局变量“隐藏”到本文件内部,其他文件不能访问。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

    当然,对于全局函数来说,static的意义仅在于隐藏,而对于全局变量来说,static除了隐藏的还有包括“延长生命周期”和“默认初始化为0”两个功能。

原创粉丝点击