作用域:
當乙個變數在程式的某個部分被宣告時,它只有在程式的一定區域內才能被訪問。而這個區域由變數的作用域(scope)決定。
編譯器可以確認4種不同型別的作用域-----檔案作用域、函式作用域、**塊作用域和原型作用域。而變數宣告的位置決定了它的作用域。
(1)、**塊作用域
位於一對花括號之間的所有語句稱為乙個**塊。任何**塊的開始位置宣告的變數都有**塊作用域,表示它們可以被這個**塊中的所有語句訪問。上圖中的6、7、9、10的變數都具有**塊作用域。函式定義中的形式引數在函式內部也具有**塊作用域。
當**塊處於巢狀狀態時,宣告於內層**塊的變數的作用域到達改**塊的尾部便告終止。
如果內層**塊有變數與外層**塊的變數重名,則內層的變數遮蔽外層的變數。外層的那個變數無發在內層通過變數名訪問。例如上圖所示,6所對應的變數在9所對應的變數所處的**塊中被遮蔽,在此處通過變數名 f 只能訪問到9所對應的變數。
(2)、檔案作用域
任何在所有**塊之外宣告的識別符號都具有檔案作用域(file scope),它表示這些識別符號從它們的宣告之處直到它所處的原始檔結尾處都是可以訪問的。上圖中的1,2都屬於檔案作用域。
(3)、原型作用域
原型作用域(prototype scope)只適用於在函式原型中宣告的引數名,如上圖中的3和8 。在原型中(與函式的定義不同,函式原型即函式宣告),引數的名字並非必需要有。但是,如果出現引數名,你可以為它取任何合法的名字,它們不必與函式定義中的形參名匹配,也不必與函式實際呼叫時所傳遞的實參匹配。
在原型作用域中唯一可能衝突的是:在乙個函式原型中出現形式引數重名。
(4)、函式作用域
函式作用域只適用於語句標籤,語句標籤(類似於組合語言中的標號)用於goto語句。基本上,函式作用域可以簡化為一條規則----乙個函式中的所有語句標籤必須唯一。
但這個知識希望永遠不會使用!因為許多公司禁止使用goto語句,因為它跳來跳去會嚴重破壞程式的模組化。使得檢錯、維護的代價大大增加。
C 識別符號的作用域
轉 包括 區域性作用域 全域性作用域 檔案作用域 函式作用域 函式原型作用域 名空間作用域 類作用域 注意 潛在作用域,也就是同名變數的作用域問題。1.區域性作用域 指在函式定義或者復合語句中,從識別符號的定義點開始到函式或者復合語句結束之間的程式段。在同乙個區域性作用域內不能出現相同名字的兩個區域...
識別符號的作用域
塊作用域 區域性作用域 檔案作用域 全域性作用域 函式原型作用域 函式作用域 類作用域 塊作用域 塊是函式中一對花括號 包括函式定義所使用的花括號 所括起的一段區域。在塊內說明的識別符號具有塊作用域,它開始於識別符號被說明的地方,並在標誌該塊結束的右花括號處結束。如果乙個塊內有乙個巢狀塊,並且該塊內...
C語言中的識別符號作用域
2018 01 15 建立人 ruo xiao com程式中該識別符號可以使用的區域。例如 函式內的區域性變數的作用域僅限於函式體本身。說明了兩點 1 其他的函式無法通過該變數名訪問它們。2 只要分屬不同的作用域,不同的變數可以起相同的名字,並且可以位於相同的位址。檔案作用域 函式作用域 塊作用域和...