c++中,除了inline函式和符號常量之外,普通的物件和函式只能被定義一次,所以.h的標頭檔案就用來儲存物件和函式的宣告,而將定義儲存在乙個.cpp中,其它要使用該物件或函式的.cpp檔案就可以包含該.h標頭檔案。同時使用extern字首表示:該物件已經在別處被定義,這裡只是給編譯器乙個提示。
同時,我們也要注意在標頭檔案中,可能會一不小心寫了個定義,比如:extern int a = 5;雖然加了extern,可這還是乙個定義。對於乙個函式,如extern nothingtodo() ;雖然也有extern,可是函式體的大括號表示這是乙個定義。
對於inline函式和符號常量,由於編譯器會用其值來替代它的名字(常量摺疊),這樣就不會產生多處定義的問題。
總之,標頭檔案中就放普通變數,物件和函式的宣告,還有inline函式和符號常量的定義。
c 宣告和定義
標頭檔案中的 全域性 變數只能放宣告,不能定義 標頭檔案中的變數只能宣告,不能定義,否則其他多個.c檔案包含該標頭檔案,出現重複定義,導致鏈結出錯。ifndef define endif防止的是 重複編譯 而不是 重複定義 重複編譯可能造成重複定義,但重複定義的 不只有重複編譯 從 變成可執行的程式...
C 宣告和定義
c 宣告和定義 宣告和定義最主要的區別是 宣告不申請記憶體空間而定義申請記憶體空間。定義申請記憶體空間這點需要.好像很多人這樣理解 我怎麼以為這有點問題 這裡有個簡單的錯誤,尤其是對我以c 的情景來理解c 標頭檔案中的 int a 全域性變數這樣寫 在c 中是定義。這裡有個情況是 如果 int a ...
C 宣告和定義的區別
宣告是告知編譯器該程式元素的名稱以及型別,定義則是使編譯器為程式元素分配記憶體空間。二者最根本的區別就是是否分配記憶體。宣告不會導致記憶體的分配,而定義會分配記憶體。在c 程式中宣告可以有多次,但是定義只能有一次。因此不能將變數的定義放置於標頭檔案中,由於標頭檔案會被多次引用,就會導致變數在多個原始...