全局變量是靜態存儲方式, 靜態全局變量也是靜態存儲方式,這二者在存儲方式上並沒有不一樣。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