為了讓多個檔案訪問相同的變數,c++ 區分了宣告和定義。
區別:
變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。
宣告用於向程式表明變數的型別和名字。定義也是宣告:當定義變數時我們宣告了它的型別和名字。可以通過使用 extern 關鍵字宣告變數名而不定義它。不定義變數的宣告包括物件名、物件型別和物件型別前的關鍵字 extern:
extern int i; // 宣告但沒有定義i
int i; // 宣告並定義i
extern 宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。
例外:
只有當宣告也是定義時,宣告才可以有初始化式,因為只有定義才分配儲存
空間。初始化式必須要有儲存空間來進行初始化。如果宣告有初始化式,那麼它
可被當作是定義,即使宣告標記為 extern:
extern double pi = 3.1416; // 定義
雖然使用了 extern ,但是這條語句還是定義了 pi,分配並初始化了儲存空間。只有當 extern 宣告位於函式外部時,才可以含有初始化式。 因為已初始化的 extern 宣告被當作是定義,所以該變數任何隨後的定義都是錯誤的:
extern double pi = 3.1416; //定義
double pi; // 錯誤:重定義pi
同樣,隨後的含有初始化式的 extern 宣告也是錯誤的:
extern double pi = 3.1416; // 定義
extern double pi; // ok
extern double pi = 3.1416; // 錯誤:重定義pi
注意: 宣告和定義之間的區別可能看起來微不足道,但事實上卻是舉足輕重的。在 c++ 語言中,變數必須且僅能定義一次,而且在使用變數之前必須定義或宣告變數。
任何在多個檔案中使用的變數都需要有與定義分離的宣告。在這種情況下,乙個檔案含有變數的定義,使用該變數的其他檔案則包含該變數的宣告(而不是定義)。
宣告和定義
宣告 向計算機介紹名字,它說,這個名字是什麼意思 而 定義 為這個名字分配 儲存空間。無論涉及到變數時還是函式時含義都一樣。無論在哪種情況下,編譯器都在 定義 處分配儲存空間。對於變數,編譯器確定這個變數佔多少儲存單元,並在記憶體中產生存放它們 的空間。對於函式,編譯器產生 並為之分配儲存空間。函式...
宣告和定義
在宣告部分出現變數有兩種情況 1 一種是需要建立儲存空間的,如 int a 2 另一種是不要建立儲存空間的,如 extern int a 前者是 定義性宣告 defining declaration 或者稱為 定義 definition 後者是 引用性宣告 referencing declarati...
宣告和定義
宣告 函式或變數會在某處出現,在此處,該函式或變數長這樣。定義 這就是這個函式或者變數。定義處,為函式或變數分配儲存空間。乙個變數或函式,只能有乙個定義。one definition rule.定義也可以是宣告。如果乙個變數或者函式有多個檔案要用,可以用extern.extern 的原理很簡單,就是...