全局變量是靜態存儲方式, 靜態全局變量也是靜態存儲方式,這兩者在存儲方式上並無不同。
區別:
雖在於非靜態全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,靜態全局變量在各個源文件中都是有效的。
靜態局部變量則限制了其作用域, 只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。由於靜態局部變量的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
///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修飾的全局變量,的作用域只在源文件的范圍
而非靜態全局變量,則可以整個源程序文件中使用
寫的很好