一、什么是全局变量?
C++中全局变量一般指定义在函数体外的变量。
全局变量按可访问性可分为外部变量和内部变量。
二、内部变量和外部变量的定义
内部变量:使用了static关键字修饰的全局变量。它的可访问范围(作用域)被限定在本源文件所在的链接文件模块中,不能被其他文件模块引用。
外部变量:没有被static修饰的全局变量。其他文件模块可以通过extern关键字引用该全局变量并访问。
三、全局变量放在头文件中会出现哪些问题?
- 问题一:对内部变量来讲,每个include该头文件的文件模块中都会单独为这个内部变量分配静态内存空间,这个空间是相对独立的,是一种空间的浪费,同时还失去全局变量访问一致性的问题,没有什么意义。如果这个头文件只被一个模块使用,对于这个文件模块来说应该没啥问题。
- 问题二:对外部变量来讲,这个头文件被多个文件模块include的情况下,链接过程会报错,因为所有include和这个头文件的模块都会有这个全局变量。在这个头文件仅仅只被一个模块include的时候可以正常使用。
四、总结
全局变量只定义在实现文件中(.cpp)。
内部变量只在本文件模块内部使用,没啥好说的。
对外部变量可以在该模块头文件中使用extern关键字修饰一下,这样其他文件模块只要直接include该头文件就可以使用模块中的外部变量了。