1. 程式人生 > >宣告,定義,extern,static,const關鍵字的一些理解

宣告,定義,extern,static,const關鍵字的一些理解

變數宣告和變數定義

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

    變數宣告:用於向程式表明變數的型別和名字。

    定義包含宣告:當定義變數時我們聲明瞭它的型別和名字,同時分配了它的記憶體

宣告函式和函式定義     對於函式來說,無論我們在.h中或者.c中都會發現有如下的格式: void func();這是函式宣告,編譯器會預設在函式前面新增extern void func(){;}:這是函式的定義 所以,如果我們在test.h中定義了變數int a, 如果在test1.c和test2.c中同時include test.h的話,編譯器會將.h中的int a變數包含進倆個不同的.c中,就會出現多重定義的錯誤。所以不能夠在.h中定義變數

。 extern

    用來宣告變數和函式,在模組化程式設計中。要暴露給別的模組的函式和變數,需要加上extern的關鍵字來進行宣告,用來表明,這些函式和變數已經在別的檔案中定義。  

static

static定義的變數和函式只允許被本模組使用,它所修飾的函式和變數都儲存在data段或者BSS段中,它所修飾的變數的宣告和定義同時進行。有時候會出現下面這種情況: test.h中定義的static int a,然後在test1.c和test2.c中include了test.h檔案,編譯和連結卻沒報錯,原因是因為,test1.c和test2.c中關於int a都是有各自不同的地址,所以並不會引起錯誤。雖然這樣,但是這不利於封裝,所以不能夠在.h中定義變數,無論是否有static修飾

const 修飾的變數和static 有相同的特性,但是const和extern結合宣告的常量可以作用於其它模組中。

模組化程式設計: (1)永遠不要在.h中定義變數 (2)除非變數被設計成全域性的,否則需要使用static將變數侷限在該.c檔案中 (3)可以在.h中宣告一個變數,包含該標頭檔案,也就聲明瞭該變數 模組化要點: (1)模組需要提供給別的模組訪問的函式和變數需要在.h檔案中加extern進行宣告 (2)模組內的函式和變數須在.c中加static加以宣告