如果是指變數的宣告和定義:
從編譯原理上來說,宣告是僅僅告訴編譯器,有個某型別的變數會被使用,但是編譯器並不會為它分配任何記憶體。而定義就是分配了記憶體。
對於下面的兩句**:
void func()
對於第一行**,編譯器不會做任何事,它不會為它在棧中分配一點東西,直到第三句,a=0;時,編譯器才會將其壓入棧中。而對於int b=0;這一句,編譯器就會生成一條指令,為它賦值。如果反彙編,看到的**可能是這樣的:
push 1;
push 0;
當然,並不一定編譯器就會樣做,也有可能在宣告int a時,編譯器就會把乙個廢值入棧,到第三條再為其賦值,這要看編譯器的具體取捨,所以,宣告不一定不是定義,而定義一定是定義。
但是,下面的宣告,一定僅僅是宣告:
extern int a;
這錶時,有乙個int變數a,它一定是在另外其他地方定義的,所以編譯器此時一定不會做什麼分配記憶體的事,因為它就是宣告,僅僅表明下面的**引用了乙個符號,而這個符號是int型別的a而已。
如果是指函式的宣告和定義:
宣告:一般在標頭檔案裡,對編譯器說:這裡我有乙個函式叫function() 讓編譯器知道這個函式的存在。
定義:一般在原始檔裡,具體就是函式的實現過程 寫明函式體。
宣告:一般在標頭檔案裡,對編譯器說:這裡我有乙個函式叫function()
定義:一般在原始檔裡,編譯器說,你說你有function,它在**?
C 定義與宣告 區別
c primer 第四版2.3.5節中這麼說到 變數定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。變數宣告 用於向程式表明變數的型別和名字。定義也是宣告 當定義變數時我們宣告了它的型別和名字。extern關鍵字 通過使用extern關鍵字宣告變數名而不定義它。1....
C 宣告與定義的區別
一,宣告與定義的區別 宣告是將乙個名稱引入程式。定義提供了乙個實體在程式中的唯一描述,涉及到記憶體空間的分配以及初始值的設定。宣告和定義有時是同時存在的。1,定義也是宣告,extern宣告不是定義,即不分配儲存空間。int a 10 定義就是宣告 extern int b 宣告,不是定義 注意 如果...
C 中宣告與定義的區別
宣告 一種把乙個名稱引入或者重新引入到某個c 作用域的構造。定義 它也是一種宣告,但該宣告必須給出被宣告實體的細節。對於變數而言,這裡的細節是指 為被宣告實體保留儲存空間。對於class型別和函式定義而言,指的是包含有一隊花括號內容的宣告。對於外部變數而言,指的是前面沒有關鍵字extern或者在宣告...