全局变量是静态存储方式, 静态全局变量也是静态存储方式,这二者在存储方式上并没有不一样。ios
区别:函数
虽在于非静态全局变量的做用域是整个源程序,当一个源程序由多个源文件组成时,静态全局变量在各个源文件中都是有效的。spa
静态局部变量则限制了其做用域, 只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。因为静态局部变量的做用域局限于一个源文件内,只能为该源文件内的函数公用,所以能够避免在其它源文件中引发错误。.net
///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 code
在a.cpp中,用static修饰a
编译没法经过
undefined reference to `a' -----> 未定义对“ a”的引用blog
能够看出被static修饰的全局变量,的做用域只在源文件的范围作用域
而非静态全局变量,则能够整个源程序文件中使用get
写的很好io