c++中extern關鍵字和static的作用域的學習
阿新 • • 發佈:2018-11-30
之前對static修飾變數後作用域的問題一直是大體瞭解,感覺和普通變數的作用域並沒有什麼區別。聚個栗子
在A.h中:
#pragma once
static int a=365;
class A
{
public:
A();
~A();
};
在main.c中:
#include<iostream>
#include"A.h"
using namespace std;
int main()
{
int b = a;
cout << b << endl;
return 0;
}
在mian.c中包含了標頭檔案後a可以用啊,感覺static並沒有起到限制作用域的問題啊。
但由於有extern,所以用static修飾後可以預防其他地方用extern聲明後進行引用。這才起到了限定了變數的作用範圍。
例如(注意標頭檔案的包含)
//A.h中 #pragma once static int a=365; int b=366; class A { public: A(); ~A(); }; //main.c中 #include<iostream> //#include"A.h" 注意,沒有包含標頭檔案 extern int a;//出錯,這才起到了static限定作用域的作用 extern int b;//可以 using namespace std; int main() { int c = b; cout << c << endl; return 0; }
靜態全域性變數在宣告它的整個檔案都是可見的,而在檔案之外是不可見的(extern外部聲明後也用不了);
當然,int b=366;這個也可以定義在A.c中。