對變數來說,宣告(declaration)指向編譯器說明變數的型別和名字;定義(definition)指向編譯器說明變數的型別和名字的同時,為變數分配記憶體,可指定初值也可不指定。可以看出,定義包含於宣告中,平常最常見的
int var;
就是一種宣告,或者說未指定初值的定義。
兩者的其他區別如下:
1. 變數只可以定義一次,但可以宣告多次;
2. extern關鍵字修飾變數時,如果有初始化,則視為定義;否則視為宣告;
int var;
// definition
extern
int var;
// declaration
extern
int var =1;
// definition
綜上,帶extern關鍵字且無初始化時為宣告,其他情況下都是定義!
對函式來說,不帶函式體的是宣告,帶函式體的是定義。
1. 全域性變數、靜態全域性變數、靜態區域性變數和區域性變數的區別
C 宣告和定義的區別
宣告是告知編譯器該程式元素的名稱以及型別,定義則是使編譯器為程式元素分配記憶體空間。二者最根本的區別就是是否分配記憶體。宣告不會導致記憶體的分配,而定義會分配記憶體。在c 程式中宣告可以有多次,但是定義只能有一次。因此不能將變數的定義放置於標頭檔案中,由於標頭檔案會被多次引用,就會導致變數在多個原始...
c 宣告和定義的區別
c 程式通常由許多檔案組成,為了讓多個檔案訪問相同的變數,c 區分了宣告和定義。變數的定義 definition 用於為變數分配儲存空間,還可以為變數指定初始值。在程式中,變數有且僅有乙個定義。宣告 declaration 用於向程式表明變數的型別和名字。定義也是宣告 當定義變數的時候我們宣告了它的...
基礎篇 C 中宣告和定義的區別
在c和c 中,宣告和定義的概念經常容易混淆 在由多個檔案構成的程式中,乙個檔案的函式可能經常需要訪問來自於其他檔案的函式或者變數,因此在編譯過程中,編譯器必須要知道另一些檔案中有哪些函式和變數,尤其是它們的基本用法。因為編譯器需要確保來自其他檔案的資料也能被正確的使用而不是錯誤的使用帶來不可預知的錯...