跳轉到內容

程式設計基礎/作用域

來自華夏公益教科書,開放的書籍,為開放的世界

識別符號名稱繫結(將名稱與實體相關聯,例如變數)的作用域是計算機程式中繫結有效的區域:可以使用名稱來引用實體的區域。這樣的區域被稱為作用域塊。在程式的其他部分,名稱可能引用不同的實體(可能具有不同的繫結),或者根本不引用任何東西(可能未繫結)。[1]

作用域是程式中識別具有識別符號名稱的專案(無論是變數、常量、函式等)的區域。在我們的討論中,我們將使用一個變數,變數在程式中的定義位置決定了它的作用域。

全域性作用域(以及由此擴充套件的全域性資料儲存)發生在變數在“函式外部”定義時。在編譯程式時,它將在程式資料區域內為變數建立儲存區域,作為目的碼的一部分。目的碼包含機器程式碼部分、資料區域和連結器解析指令。由於變數具有全域性作用域,因此它可用於原始碼中的所有函式。它甚至可以被連結到程式碼的其他目標模組中的函式使用;但是,我們現在先忽略這個解釋。此時應該學會一個關鍵的措辭變化。雖然變數具有全域性作用域,但技術上它只在定義點到程式原始碼結束之間可用。這就是為什麼大多數具有全域性作用域的變數都放置在原始碼的頂部,在任何函式之前。這樣它們對所有函式都是可用的。

區域性作用域(以及由此擴充套件的區域性資料儲存)發生在變數在“函式內部”定義時。在編譯時,編譯器會建立機器指令,這些指令將指導在稱為堆疊的區域上建立儲存位置,堆疊是計算機記憶體的一部分。這些記憶體位置存在直到函式完成其任務並返回到其呼叫函式。在組合語言中,我們談論的是在函式終止時將專案壓入堆疊和彈出堆疊。因此,堆疊是所有函式使用的可重用記憶體區域,並在函式終止時釋放。雖然變數具有區域性作用域,但技術上它只在定義點到函式結束之間可用。將資料項傳遞到函式的引數傳遞將它們建立為區域性變數。此外,函式所需的任何其他變數或常量通常出現在函式定義的頂部,以便在整個函式程式碼執行期間可用。

作用域是模組化的重要概念。程式控制函式可以使用全域性作用域來定義變數和常量,將它們放在程式的頂部,在任何函式之前。特定任務函式只使用區域性作用域變數,透過引數傳遞將必要的資料傳遞到函式中,並在需要時建立區域性變數和常量。任何需要傳回呼叫函式的資訊再次透過引數傳遞完成。這種將所有資料傳入和傳出函式的封閉通訊模型為封裝建立了一個重要的前身概念,封裝用於面向物件程式設計。

關鍵術語

[編輯 | 編輯原始碼]
資料區域
目的碼檔案的一部分,用於儲存資料。
全域性作用域
在函式外部定義的資料儲存。
區域性作用域
在函式內部定義的資料儲存。
作用域
原始碼檔案中識別識別符號名稱的區域。
堆疊
計算機記憶體的一部分,用於儲存資料。

參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書