宣告和定義

2022-04-12 01:02:45 字數 1002 閱讀 2855

為了允許把程式拆分成多個邏輯部分來編寫,c++語言支援分離式編譯(separate compilation)機制,該機制允許將程式分割為若干個檔案,每個檔案可被獨立編譯。

如果將程式分為多個檔案,則需要有在檔案間共享**的方法。

例如,乙個檔案的**可能需要使用另乙個檔案中定義的變數。乙個實際的例子是std::coutstd::cin,它們定義於標準庫,卻能被我們寫的程式使用。

為了支援分離式編譯,c+語言將宣告定義區分開來。宣告(declaration)使得名字為程式所知,乙個檔案如果想使用別處定義的名字則必須包含對那個名字的宣告。而定義(definition)負責建立與名字關聯的實體。

變數宣告規定了變數的型別和名字,在這一點上定義與之相同。但是除此之外,定義還申請儲存空間,也可能會為變數賦乙個初始值。

如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯式地初始化變數∶

extern int i;    // 宣告 i而

int j; // 宣告並定義 j int j;

任何包含了顯式初始化的宣告即成為定義。

我們能給由extern關鍵字標記的變數賦乙個初始值,但是這麼做也就抵消了extern的作用。extern語句如果包含初始值就不再是宣告,而變成定義了∶

extern double pi = 3.1416;       // 定義
在函式體內部,如果試圖初始化乙個由extern關鍵字標記的變數,將引發錯誤。

變數能且只能被定義一次,但是可以被宣告多次。

宣告和定義的區別看起來也許微不足道,但實際上卻非常重要。

如果要在多個檔案中使用同乙個變數,就必須將宣告和定義分離。

此時,變數的定義必須出現在且只能出現在乙個檔案中,而其他用到該變數的檔案必須對其進行宣告,卻絕對不能重複定義。

宣告和定義

宣告 向計算機介紹名字,它說,這個名字是什麼意思 而 定義 為這個名字分配 儲存空間。無論涉及到變數時還是函式時含義都一樣。無論在哪種情況下,編譯器都在 定義 處分配儲存空間。對於變數,編譯器確定這個變數佔多少儲存單元,並在記憶體中產生存放它們 的空間。對於函式,編譯器產生 並為之分配儲存空間。函式...

宣告和定義

在宣告部分出現變數有兩種情況 1 一種是需要建立儲存空間的,如 int a 2 另一種是不要建立儲存空間的,如 extern int a 前者是 定義性宣告 defining declaration 或者稱為 定義 definition 後者是 引用性宣告 referencing declarati...

宣告和定義

宣告 函式或變數會在某處出現,在此處,該函式或變數長這樣。定義 這就是這個函式或者變數。定義處,為函式或變數分配儲存空間。乙個變數或函式,只能有乙個定義。one definition rule.定義也可以是宣告。如果乙個變數或者函式有多個檔案要用,可以用extern.extern 的原理很簡單,就是...