經常在c語言中遇到這樣的情況,乙個.c檔案中定義的 全域性變數例如i,在另乙個.c檔案中能用使用嗎?
答案是:可以的,全域性變數預設是extern的,函式也是。如果你寫了static修飾它就不行了
下面是各個概念:
全域性變數:
例如在單個.c檔案中
int a, b; //全域性變數
void func1()
float x,y; //全域性變數
int func2()
int main()
int a, b; //全域性變數
void func1()
float x,y; //全域性變數
int func2()
int main()
上面的變數a,b就是全域性變數。在有的時候,專案是進行劃分的,會有不同個.c檔案的出現,如果在不同.c**現例如變數a、b這樣的變數,
區域性變數:
區域性變數只有區域性作用域,它只在函式呼叫執行期間存在,函式一次呼叫執行結束後,變數被撤銷,其所占用的的記憶體也被**
例如:
int f1(int a)
int main()
靜態全域性變數:
靜態全域性變數具有全域性作用域,,它只編譯期被始化一次,它不能用變數來初始化。它作用於定義它的檔案裡,不能作用到其它的檔案裡。這樣即使多個不同的原始檔定義了同名的靜態全域性變數,他們也是不同的變數。
靜態區域性變數:
靜態區域性變數只有區域性作用域,它只編譯期被始化一次,它不能用變數來初始化。在它初始化之後便一直存在,直到程式執行結束。它與全域性變數的區別是:全域性變數是對所有的函式是可見的,而靜態區域性變數只對定義自己的函式體始終可見。
巨集:巨集定義又稱為巨集代換、巨集替換,簡稱「巨集」。在預編譯(即巨集展開)階段使用具體的內容替換巨集名,預編譯過程是不做語法檢查的,這樣導致在巨集在程式**錯不好判斷。
巨集與變數的區別:
巨集定義不分配記憶體,變數定義需要分配記憶體
巨集不分資料型別,變數區分資料型別。
巨集定義之後值是不能改變的,變數的值是可以改變的
巨集與const常變數的區別:
巨集系統不為它分配記憶體,const定義的常量系統為它分配記憶體
巨集在預編譯階段直接進行替換過,不進行資料型別及語法的檢驗, const定義的常量在編譯時進行嚴格的型別和語法檢驗,可以避免出錯。
分配記憶體空間:
分配記憶體空間:
區域性變數分配在棧空間;
全域性變數、靜態變數都分配在靜態儲存區;
巨集不分配記憶體空間
其他參考:
//函式宣告未給出時編譯器預設猜它是int 型的函式
全域性變數和區域性變數
全域性變數 可以被不同的函式 類或檔案呼叫的變數,在函式外定義。區域性變數 只能在函式內使用,定義在函式內。區域性變數的使用 class myclass def myfun num 12 print myfun num num 正確 def myfun2 num num 1 print mufun ...
全域性變數和區域性變數
區域性變數 在方法中開闢的變數,只在方法中有效 區域性變數在定義時不會初始化,要顯式的給它乙個值 如未給它乙個初始值,雖然編譯的時候會通過,但是執行的時候會產生為初始化錯誤!方法呼叫 執行完,區域性變數便會自動釋放。在方法內的語句塊中建立的變數在編譯時假如未初始,如若使用,也會報未初始化錯誤!呼叫的...
全域性變數和區域性變數
通常的認為是定義在函式外面的就稱之為全域性變數 函式體內的稱之為區域性變數 在函式中與全域性變數同名的時候 情形1 函式內部的變數名如果第一次出現,且出現在 前面,即被視為定義乙個區域性變數。num 100 定義乙個全域性變數 defdemo num 100 這裡面的實際上是定義了乙個區域性的變數 ...