【C++注意事項】2 變數聲明和定義

來源:互聯網
上載者:User

標籤:聲明   編譯   變數聲明   c++   機制   

不可能將所有的C++程式放到一個檔案中咯,因此C++就支援了分離式編譯(separate compilation)機制,它允許將程式分為若干個檔案,每個檔案可被獨立編譯。這樣說明了,當你的程式有很多檔案時,修改其中一個檔案後不需要將所有檔案都重新編譯一遍,只需要編譯修改過的就好,然後將它們都連結起來。

C++是如何支援分離式編譯的呢?通過將聲明和定義分離開來。

聲明(declaration)使得名字為程式所知,一個檔案如果想使用別處定義的名字則必須包含該名字的聲明。

定義(definition)負責建立與名字關聯的實體。

一個聲明語句由一個基礎資料型別 (Elementary Data Type)(base type)和緊隨其後的一個聲明符(declarator)列表組成。

定義還需要申請儲存空間,也可能會為變數賦一個初始值。

如果想聲明一個變數而非定義它,就在變數名前添加關鍵字extern關鍵字標記的變數賦一個 初始值,但是這麼做也就抵消了extern的作用。extern語句如果包含初始值就不再是聲明,而變成了定義。

extern int i;  // 聲明i而非定義iint j;  // 聲明並定義j

在函數體內部,如果試圖初始化一個由extern關鍵字標記的變數,將引發錯誤。

// 錯誤int main(){    extern int i;    int i=10;    return 0;}

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

// 這樣是可以得extern int i;extern int i;extern int i;int main(){    int i=10;    return 0;}

如果要在多個檔案中使用同一個變數,就必須將聲明和定義分離。但是此時變數的定義就必須出現在且只能出現在一個檔案中,而其他用到該變數的檔案必須對其進行聲明,卻絕對不能重複定義。

另外C++還會在編譯階段進行類型檢查(type checking),所以也稱C++是一種靜態類型(statically typed)語言。程式越複雜,靜態類型堅持越有助於發現問題。然後,前提是編譯器必須知道每一個實體物件的類型,這就要求我們在使用某個變數之前必須聲明其類型。

【C++注意事項】2 變數聲明和定義

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.