【C++注意事項】2 變數宣告和定義
不可能將所有的C++程式放到一個檔案中咯,因此C++就支援了分離式編譯(separate compilation)機制,它允許將程式分為若干個檔案,每個檔案可被獨立編譯。這樣說明了,當你的程式有很多檔案時,修改其中一個檔案後不需要將所有檔案都重新編譯一遍,只需要編譯修改過的就好,然後將它們都連結起來。
C++是如何支援分離式編譯的呢?通過將宣告和定義分離開來。
宣告(declaration)使得名字為程式所知,一個檔案如果想使用別處定義的名字則必須包含該名字的宣告。
定義(definition)負責建立與名字關聯的實體。
一個宣告語句由一個基本資料型別(base type)和緊隨其後的一個宣告符(declarator)列表組成。
定義還需要申請儲存空間,也可能會為變數賦一個初始值。
如果想宣告一個變數而非定義它,就在變數名前新增關鍵字extern關鍵字標記的變數賦一個 初始值,但是這麼做也就抵消了extern的作用。extern語句如果包含初始值就不再是宣告,而變成了定義。
extern int i; // 宣告i而非定義i
int 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)語言。程式越複雜,靜態型別堅持越有助於發現問題。然後,前提是編譯器必須知道每一個實體物件的型別,這就要求我們在使用某個變數之前必須宣告其型別。
感謝您的訪問,希望對您有所幫助。 歡迎大家關注、收藏以及評論。
我的更多部落格文章:NoMasp部落格導讀
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- c+++變數宣告和定義C++變數
- [C++]變數宣告與定義的規則C++變數
- Python命令列引數定義及注意事項Python命令列
- C++教程-----C++變數型別和變數的定義C++變數型別
- C++ 宣告與定義C++
- 【TABLE】oracle表線上重定義注意事項Oracle
- Redis設定Key/value的規則定義和注意事項(附工具類)Redis
- C++ queue的注意事項C++
- 【C++注意事項】3 引用C++
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- Shell程式設計-shell變數2-位置變數和預定義變數程式設計變數
- 嚴格模式下變數宣告注意點模式變數
- c++中模板_類别範本的宣告和定義C++
- javascript變數賦值或者重新賦值注意事項JavaScript變數賦值
- 變數的定義和使用變數
- Android自定義View注意事項AndroidView
- JS變數宣告和函式宣告提升JS變數函式
- 【C++注意事項】4 指標 PointersC++指標
- 執行緒問題2(注意例項變數)執行緒變數
- JavaScript 設定CSS與注意事項JavaScriptCSS
- SQL Server Profiler 設定注意事項SQLServer
- java變數怎麼設定(宣告)Java變數
- Ignite自定義函式注意事項函式
- NC50學習手記(3)——科目定義注意的事項
- javascript變數宣告需要注意的一個地方JavaScript變數
- 【C++注意事項】7 Library vector TypeC++
- C++與Rust變數宣告的比較C++Rust變數
- struts2 + urlrewrite 整合注意事項
- Db2恢復注意事項DB2
- OS__安裝、引數、注意事項、驗證事項
- [Hive]hive分割槽設定注意事項Hive
- Oracle:記憶體設定注意事項Oracle記憶體
- 深入解析JS變數宣告和函式宣告提升JS變數函式
- 淺談JS變數宣告和函式宣告提升JS變數函式
- Mysql資料庫自定義函式的定義、使用方法及操作注意事項MySql資料庫函式
- 類别範本及其成員函式的定義及注意事項函式
- 注意,ruby迴圈體定義的變數在結束時後,變數還存在變數
- 【C++注意事項】6 Library string TypeC++