C語言中變量聲明和定義

C語言中變量聲明和定義
很多初學者,對變量的定義和聲明分不請,CC++中略有不同,再加上conststaticextern就更加混亂,下面就此問題給予詳細講解並舉例說明。

變量的定義:爲變量分配存儲空間,同時指明變量的類型和名字。另外變量的初始化,就是在變量的定義處給出值。

變量的聲明:它主要向程序聲明變量的類型和名字。

static修飾符:static int a;將變量的作用域限制在一個源文件內,對其他源文件a是不可見的。

嚴格的規則:變量有且只能有一次定義,但是可以聲明多次,使用變量前必須定義或聲明。一個項目中可以有多個源文件,但在所有的源文件中只允許出現一次對某個變量的定義。

舉例說明:

**************************************************************************

int i;          //定義

int i=2;       //定義

static int i;  //定義

extern int i=8; //定義

extern int i;      //這就是單純的聲明

*************************************************************************
問題1:如果外部變量的定義各指定一個初始值?大多數系統都會拒絕接受該程序。

C語言中變量聲明和定義 - myswirl - myswirl
 
問題2:如果一個外部變量在多個源程序中定義卻未指定初始值?某些系統可能會接受,例如VC6.0
同樣的程序在VC++無法編譯通過。
C語言中變量聲明和定義 - myswirl - myswirl
 如果要在所有的C語言實現中避免上述問題,惟一的解決辦法就是每個外部變量只定義一次

問題3:同一變量名在不同文件中聲明爲不同的類型?需要程序員自己檢查。
C語言中變量聲明和定義 - myswirl - myswirl

解決上述問題,只需接受一個簡單的規則:每個外部變量只在一個頭文件中聲明,需要用到外部變量的地方都應該包括這個頭文件,特別指出,定義該外部變量的模塊也應該包括這個頭文件。



爲什麼C中的const全局變量不需要賦初值,而C++中的const全局變量需要賦初值?

發佈了6 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章