全局變量具有外部連接性,即同一工程中其它文件中的也可引用。 將這兩個文件放在同一工程中,你發現每一文件單獨編譯能通過,但作為工程不能構成.exe文件運行。若將有關變量y的行注釋後(或將static換成extern)就可以了。這是因為靜態變量的作用域在本文件內,不能擴充到其它文件。其作用是當多人合作開發一個工程時,僅在自己的文件內使用的全局變量用靜態變量不會與其他人用的變量相混淆,這就是標識符的一致性。 變量可以分為全局變量、靜態全局變量、靜態局部變量和局部變量 http://blog.csdn.net/pipisorry/article/details/29432147 http://bbs.csdn.net/topics/10104758 http://www.cppblog.com/Lee/archive/2009/03/19/77103.html
而靜態變量不具有外部連接性,即同一工程中其它文件中不可以引用。
如:
//cpp1.cpp
extern int x=10;
static int y=5;
//cpp2.cpp
#include
void main()
{
extern int x;
extern int y;
cout<
按存儲區域分:全局變量、靜態全局變量和靜態局部變量都存放在內存的全局數據區,局部變量存放在內存的棧區
按作用域分:全局變量在整個工程文件內都有效;靜態全局變量只在定義它的文件內有效;靜態局部變量只在定義它的函數內有效,只是程序僅分配一次內存,函數返回後,該變量不會消失;局部變量在定義它的函數內有效,但是函數返回後失效。
全局變量和靜態變量如果沒有手工初始化,則由編譯器初始化為0。局部變量的值不可知。
代碼如下:
//test.cpp
#include
extern int a;//變量聲明,不是定義
static int b=5;
void func1()
{
cout<
//main.cpp
int a;
int b=10;
void func2()
{
static int i;
i++;
cout<
}
void func1();
void main()
{
a=20;
func1();
func2();
func2();
}
輸出結果為
5
20
1
2