c++ 全局变量 静态全局变量
全局变量是静态存储方式, 静态全局变量也是静态存储方式,这两者在存储方式上并无不同。
区别:
虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,静态全局变量在各个源文件中都是有效的。
静态局部变量则限制了其作用域, 只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态局部变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
///a.h #ifndef A_H_INCLUDE #define A_H_INCLUDE extern int a; int b; #endif // a_h_include
///a.cpp int a = 10; ///main.cpp #include <iostream> #include "a.h" using namespace std;
///main.cpp #include <iostream> #include "a.h" using namespace std; int main() { cout << a; return 0; }
编译成功,输出 10
在a.cpp中,用static修饰a
编译无法通过
undefined reference to `a' -----> 未定义对“ a”的引用
可以看出被static修饰的全局变量,的作用域只在源文件的范围
而非静态全局变量,则可以整个源程序文件中使用
写的很好