[C語言]變量的聲明和定義有什么區別


為變量分配地址和存儲空間的稱為定義,不分配地址的稱為聲明。

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

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

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

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

//聲明一個外部變量:(通過使用extern關鍵字,可以聲明變量名而不定義它)
extern int Number;

 

//定義一個變量
int Number;

如果聲明有初始化式,就被當作定義,即使前面加了extern。

只有當extern聲明位於函數外部時,才可以被初始化。

//是extern聲明,也是定義,因為對變量進行了初始化
extern double pi=3.1416; 

一個變量可以在多個地方聲明,但是只能在一個地方定義。

加入extern修飾的是變量的聲明,說明此變量將在文件以外或在文件后面部分定義。

說明:很多時候一個變量,只是聲明不分配內存空間,直到具體使用時才初始化,分配內存空間,如外部變量。

變量的聲明有兩種情況:

1、一種是需要建立存儲空間的。例如:int Number 在聲明的時候就已經建立了存儲空間。

2、一種是不需要建立存儲空間的。 例如:extern int Number 其中變量Number是在別的文件中定義的。

前者是“定義性聲明(defining declaration)”或者稱為“定義(definition)”,而后者是“引用性聲明(referncing declaration)”。

從廣義的角度來講聲明中包含着定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義,例如:int Number 它既是聲明,同時又是定義。然而對於 extern int Number 來講它只是聲明不是定義。

一般的情況下我們常常這樣敘述:建立存儲空間的聲明稱之為“定義”,不需要建立存儲空間的聲明稱之為“聲明”。

很明顯我們在這里指的聲明是范圍比較窄的,即狹義上的聲明,也就是說非定義性質的聲明。

 

函數的聲明和定義的區別比較簡單,只是看函數之后是否帶有{ }即可;

帶有{ }的就是定義,不帶的就是聲明;

 

注意事項:
1.變量定義不要放在.h文件中,這會導致重復定義的錯誤;

2.可以在頭文件中聲明一個變量,在用的時候包含這個頭文件就聲明了這個變量;

總結:
1.變量在使用之前要被定義或者聲明;

2.變量只能被定義一次,但是可以被聲明很多次;

3.定義會分配相應的存儲空間,但是聲明不會;

 

注意:

有三個例外,以下三種實體的定義也可以放到頭文件中:

1.值在編譯時就已知的const變量的定義可以放到頭文件中;

2.類的定義可以放到頭文件中;

3.inline函數;

這三個實體可以定義在多個源文件中,只要在每個源文件中的定義相同;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM