C語言細節之定義與聲明

什麼是定義什麼是聲明,似乎這倆個東西一樣但是又有所區別,思考一下,如果你不能直接說出這二者的根本區別,那麼本文對你還是有點用處的。
首先什麼是定義?《C++Primer》第四版 2.3.5節中這麼說到:

①變量定義:用於爲變量分配存儲空間,還可爲變量指定初始值。程序中,變量有且僅有一個定義。

②變量聲明:用於向程序表明變量的類型和名字。

③定義也是聲明:當定義變量時我們聲明瞭它的類型和名字。

④extern關鍵字:通過使用extern關鍵字聲明變量名而不定義它。

這樣就很清楚了,所謂定義就是創建一個對象,爲這個對象分配一塊內存並給這塊內存命名。從此這個變量名和這塊內存地址就綁定了,並且這塊

內存地址的位置也不能改變。一個變量或對象在一定的區域內只能定義一次,如果被多次定義,編譯器會提示重複定義。

聲明比較複雜,聲明的第一重含義是告訴編譯器這個名字已經匹配到到一塊內存帶上上了,下面的代碼用到的變量已經在別的地方定義了。

第二重含義是告訴編譯器這個名字我先預訂了,別的地方不能再使用這個名字。這種用法最典型的就是void fun(int i,int c).

1.定義也是聲明,extern聲明不是定義,即不分配存儲空間。extern告訴編譯器變量在其他地方定義了。

例如:extern int i; //聲明,不是定義

             int i; //聲明,也是定義           

2.如果聲明有初始化式,就被當作定義,即使前面加了extern。只有當extern聲明位於函數外部時,纔可以被初始化。

例如:extern double pi=3.1416;  //定義

3.函數的聲明和定義區別比較簡單,帶有{ }的就是定義,否則就是聲明。

例如:extern double max(double d1,double d2);  //聲明

4.除非有extern關鍵字,否則都是變量的定義。

例如:extern int i; //聲明

             int i; //定義      

程序設計風格注意:

    1. 不要把變量定義放入.h文件,這樣容易導致重複定義錯誤。

    2. 儘量使用static關鍵字把變量定義限制於該源文件作用域,除非變量被設計成全局的。

    3. 可以在頭文件中聲明一個變量,在用的時候包含這個頭文件就聲明瞭這個變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章