C 作用域總結

2021-06-05 04:42:01 字數 1585 閱讀 1825

在c++中,涉及到作用域的語法很多,經常混淆。所以對作用域與作用域作乙個總結,注意這個總結還不完整,當遇到新的語法時再繼續補充。

一、全域性作用域(global scope)。

概念:定義在函式外部的名字具有全域性作用域。具有全域性作用域的名字可以在整個程式中訪問,即使不同檔案也可以訪問。

二、如何訪問全域性作用域的變數?

1. 變數在本檔案中定義。

直接訪問。

比如:

// file_1.cpp

int counter; // definition

// file_1.cpp

cout << counter++ << endl;

2. 變數在其它檔案中定義。

在訪問前先要宣告,然後才可以使用。例如:

// file_1.cpp

int counter; // definition

// file_2.cpp

extern int counter; // declaration

cout << couter++ << endl; // counter是在檔案file_1.cpp中定義的全域性變數

宣告沒有定義變數,只是告訴編譯器在其它檔案中有counter這個變數。所以在file_2.cpp中,counter是file_1.cpp定義的全域性變數。

注意:我們要區分其它檔案與include。如果include了這個檔案,就不再是其它檔案了。比如下面的例子,這個時候counter對file_2.cpp是可見了。因為file_2.cpp已經包含了檔案file_1.cpp。

// file_2.cpp

#include file_1.cpp

三、const 物件預設為檔案的區域性變數

在全域性作用域定義的const變數,只在該檔案中是全域性變數,在檔案外部是不可見的。

// file_1.cpp

const int counter = 10; // definition

// file_2.cpp

cout << counter++ << endl; // error, 檔案file_1中的counter在file_2中不可見

有一種辦法可以把const變數變為全域性變數,其它檔案也可以訪問。方法是在定義時加上extern修飾符,這樣在整個程式中都可以訪問該const物件了。

// file_1.cpp

extern const int counter = 10; // definition

// file_2.cpp

cout << counter++ << endl; // ok

當然,file_1.cpp定義的counter必須是在全域性作用域定義的。

注意:這裡的extern修飾符與普通的extern修飾符作用不同。這裡是將const變為整個程式的全域性變數,而普通的extern修飾符是宣告乙個變數。同乙個符號在不同的上下文中意思不同甚至完全不同,這就是c++難以掌握的原因之一,所以總結就變得更加重要了。

總結的不完整,以後見到涉及作用域的知識點再繼續補充。

c語言塊級作用域 C語言 作用域

c語言 作用域 型別作用域 生命週期 auto變數 一對 內 當前函式 static區域性變數 一對 內 整個程式執行期 extern變數 整個程式 整個程式執行期 static全域性變數 當前檔案 整個程式執行期 extern函式 整個程式 整個程式執行期 static函式 當前檔案 整個程式執行...

c 作用域與可見域

c 作用域可分為5類 函式原型作用域 塊作用域 類作用域 檔案作用域和全域性 程式 作用域 跨檔案 1.函式原型作用域 最小的作用域 函式原型 int func int x 這是乙個函式宣告,函式形參x 的作用域就時所謂的函式原型作用域。2.塊作用域 一對大括號 內的一段程式,塊中宣告的識別符號作用...

js總結(作用域 繼承)

函式 全域性作用域 函式作用域 全域性變數 區域性變數 如果函式或其他資料型別,不依託非全域性變數,那麼就預設依託全域性變數,作為全域性物件的屬性和方法,否則被當做區域性物件屬性或方法。this被用作指向屬性和方法所依託的物件。var x 100 var y 77 var a1 a1.xx 77,9...