定義和宣告的區別

2021-05-28 15:30:52 字數 628 閱讀 2237

之前學習c/c++的時候,都沒去注意變數的定義和宣告的具體區別,也隨意將它們放在標頭檔案,今日看c++ primer,才發現原來變數的定義和宣告之間的區別竟然如此之大,而且區別它們兩個竟然如此重要。

變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。

宣告用於向程式表明變數的型別和名字。定義包括宣告:當定義變數時我們宣告了它的型別和名字。可以通過使用extern關鍵字宣告變數名而不定義它。不定義變數的宣告包括物件名,物件型別和物件型別前的關鍵字extern:

extern int i;//宣告而沒有定義i

int i;//宣告和定義了i

extern int i=0;// 宣告和定義了i

extern宣告而沒有定義,也不分配儲存空間。乙個程式中,可以宣告多次,但只能定義一次。

標頭檔案用於宣告而不是用於定義。因為標頭檔案包含在多個原始檔中,所以不應該含有變數或函式的定義。對於標頭檔案不應該含有定義這個規則,有三個例外的:標頭檔案可以定義類、值在編譯時就已經知道的const物件和inline函式。這些實體可以在多個原始檔中定義,只要每個原始檔中的定義是相同的。

所以在編寫標頭檔案的時候,定義和宣告的區別是很重要的。

定義和宣告的區別

2 變數定義和變數宣告的區別 3 物件定義和物件宣告的區別 關於宣告和定義有如下兩種特殊情況需要注意 1 宣告和定義如果變數型別不一致,將導致錯誤的解析。global.c float g f 10.0 main.c extern int g f intmain void 2 對於結構體型別如果只有宣...

變數定義和宣告的區別

所謂定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。宣告有兩重含義 1 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的 用到變數或者物件是在別的地方定義的。宣告可以出現多次。2 告訴編譯器,這個名字已經被預定了,別的地方...

定義和宣告

定義 什麼是定義?所謂的定義就是 編譯器 創造乙個物件,為這個物件分配一塊記憶體並給它取上乙個名字,這個名字就是我們常常說的定義名或物件名。但注意,這個名字一旦和這塊記憶體匹配起來 可以想象是這個名字嫁給了這塊空間,沒有要彩禮啊 它們就生死與共,終生不離不棄,並且這塊內 存的位置也不能被改變。乙個變...