C 宣告和定義的區別

2021-06-22 18:56:14 字數 1023 閱讀 2122

宣告是告知編譯器該程式元素的名稱以及型別,定義則是使編譯器為程式元素分配記憶體空間。二者最根本的區別就是是否分配記憶體。宣告不會導致記憶體的分配,而定義會分配記憶體。在c++程式中宣告可以有多次,但是定義只能有一次。因此不能將變數的定義放置於標頭檔案中,由於標頭檔案會被多次引用,就會導致變數在多個原始檔中被重複定義,這是c++所不允許的。但是也有例外的情況,以下3種定義可以放入標頭檔案中:

a. 類的定義。

b. const變數的定義。因為const常量的作用域僅限於定義它的檔案,所以可以在多個原始檔中出現它的定義。

c. inline函式。

宣告可以充當為定義,除非是以下幾種情況:

a. 函式原型(無函式體的函式宣告)。

b. 包含extern關鍵字並且沒有初始化變數、物件或函式體。例如:

extern int i; //宣告

extern int p = 123; //定義

c.  沒有下列定義的類名宣告,如class t;

d. 類宣告中的靜態資料成員。例如:

class abc;
值得注意的是,你看到的是i的宣告式而非定義式。c++會要求你為所使用的任何東西提供定義式,但是如果它是class的專屬常量且是static且為int型別時,可以區別對待。如果不取它的位址,你可以宣告並使用它們而無需提供定義式。但是如果你要取它的位址或是編譯器並不認可這種行為,你需要在實現檔案中新增如下**:

const int abc::i;
如果你的編譯器不支援以上語法,即不允許static成員在其宣告式中獲得初值,你可以將初值放在定義式內。

class abc;

abc::i = 10;

但是如果你的class在編譯期間需要乙個class常量值,例如編譯器需要知道ui陣列的大小。這時你可以使用enum來彌補。

class abc;

int ui[i];

};

c 宣告和定義的區別

c 程式通常由許多檔案組成,為了讓多個檔案訪問相同的變數,c 區分了宣告和定義。變數的定義 definition 用於為變數分配儲存空間,還可以為變數指定初始值。在程式中,變數有且僅有乙個定義。宣告 declaration 用於向程式表明變數的型別和名字。定義也是宣告 當定義變數的時候我們宣告了它的...

C中宣告和定義的區別

對變數來說,宣告 declaration 指向編譯器說明變數的型別和名字 定義 definition 指向編譯器說明變數的型別和名字的同時,為變數分配記憶體,可指定初值也可不指定。可以看出,定義包含於宣告中,平常最常見的 int var 就是一種宣告,或者說未指定初值的定義。兩者的其他區別如下 1....

宣告和定義的區別

c primer 3rd 5.2宣告語句講得不清不楚的,還是effective c 2nd講得清楚 所謂宣告 declaration 就是用來將乙個object function class 或tempate的型別名稱告訴編譯器 宣告式並不帶有細節資訊 對object而言,其定義式是編譯器為它配置記...