作用域 :程序中可以訪問一個標識符 的一個或多個區域。一個C變量的作用域可以是代碼塊作用域 、函數原型作用域 或者文件作用域 。
一個代碼塊是包含在開始花括號和相應的結束花括號之內的一段代碼。在代碼塊中定義的變量具有代碼塊作用域(block scope) ,從該變量被定義的地方到包含該定義的代碼塊的末尾該變量均可見。另外,函數的形式參量儘管在函數的開始花括號前進行定義,同樣也具有代碼塊作用域,隸屬於包含函數體的代碼塊。所以,局部變量和函數的形參都具有代碼塊作用域。
函數原型作用域從變量定義處一直到函數聲明的結尾,也就是說只在這一句話內起作用 。
一個在所有函數之外定義的變量具有文件作用域(file scope ).文件作用域變量也稱爲全局變量 。
鏈接 :一個C變量具有下列鏈接之一:外部鏈接,內部鏈接或空鏈接
具有代碼塊作用域或函數原型作用域的變量有空鏈接。
具有文件作用域的變量可能有內部或者外部鏈接。一個具有外部鏈接的變量可以在一個多文件程序的任何地方使用,一個具有內部鏈接的變量可以在一個文件的任何地方使用。通過看是否使用了static關鍵字來判斷是內部還是外部鏈接。
int giants = 5; //文件作用域,外部鏈接
static int dodgers = 3; // 文件作用域,內部鏈接
存儲時期 :一個C變量有以下兩種存儲時期之一:靜態存儲時期和自動存儲時期。靜態存儲時期,表示其在程序執行期間一直存在。具有文件作用域的變量都具有靜態存儲時期。
注意對於文件作用域的變量,關鍵字static表明鏈接類型,而非存儲時期。
具有代碼作用域的變量一般情況下具有自動存儲時期。
c使用作用域、鏈接和存儲時期來定義5種存儲類:自動、寄存器、具有代碼塊作用域的靜態、具有外部鏈接的靜態,以及具有內部鏈接的靜態。
.........................詳細的內容因爲誤操作沒了。。。泣血啊。。。等以後補上。。
5. 具有內部鏈接的靜態變量,具有靜態存儲時期、文件作用域和內部鏈接。
static int svil = 1; //具有內部鏈接的靜態變量
只能被與它同一個文件中的函數使用。
多文件:在一個文件的所有函數外面定義的變量具有全局作用域,靜態存儲空間。在別的文件中想用這個變量需要用extern來聲明。要是定義的時候用static來聲明就只能在本文件中使用這個變量了。
對於函數:似乎在一個文件中的變量定義的函數,在別的文件可以直接使用(也許得先定義?)