C語言中如何定義全域性變數

2021-05-23 22:31:00 字數 1101 閱讀 9847

c/c++

2010-09-06 13:01:39

閱讀590

字型大小:大

小訂閱

眾所周知,全域性變數在被定義後,系統會為全域性變數分配記憶體並且它還可以被其他模組通過c語言中extern關鍵字呼叫。這樣就必須在 xx.c 和xx.h 檔案中定義。這種重複的定義很容易導致錯誤。 下面是只需用在標頭檔案中定義一次就可以在別的模組使用的定義方法。

格式: 定義全域性巨集。

#ifdef   ***_globals 

#define  ***_ext

#else

#define  ***_ext extern

#endif

上面位於.h 檔案中,每個全域性變數都加上了***_ext的字首,***代表模組的名字。

該模組的.c檔案中有以下定義:

#define  ***_globals

當編譯器處理.c檔案時,它強制***_ext(在相應.h檔案中可以找到)為空,(因為***_globals已經定義)。所以編譯器給每個全域性變數分配記憶體空間,而當編譯器處理其他.c檔案時,***_global沒有定義,***_ext被定義為extern,這樣使用者就可以呼叫外部全域性變數。

高階:在abc.h:

#ifdef   abc_globals

#define  abc_ext

#else

#define  abc_ext extern

#endif

abc_ext  unsigned int      ctr;

同時,abc.h有中以下定義:

#define  abc_globals

當編譯器處理abc.c時,它使得標頭檔案變成如下所示,因為abc_ext被設定為空。

unsigned int       ctr;

這樣編譯器就會將這些全域性變數分配在記憶體中。當編譯器處理其他.c檔案時,標頭檔案變成了如下的樣子,因為abc_global沒有定義,所以abc_ext被定義為extern。

extern unsigned int       ctr;

在這種情況下,不產生記憶體分配,而任何 .c檔案都可以使用這些變數。這樣的就只需在 .h 檔案中定義一次就可以了。

C語言中定義全域性變數

1 在c語言的標頭檔案中定義變數出現的問題 最好不要傻嘻嘻的在標頭檔案裡定義什麼東西。比如全域性變數 xx標頭檔案 ifndef xx 標頭檔案.h define xx 標頭檔案.h int a endif 那麼,很糟糕的是,這裡的int a 是個全域性變數的定義,所以如果這個標頭檔案被多次引用的話...

C 如何定義全域性變數

在實際的操作過程中經常會遇到,form1中的變數需要傳入form2,或者控制項中的值需要傳入另外乙個窗體,這是只需要定義乙個全域性變數就可以了 1 定義全域性變數 public partial class form1 form 2 給全域性變數賦值 username convert.tostring...

C語言中全域性變數的定義與呼叫

1.譚浩強 書中對 全域性變數 的定義 在函式內定義的變數是區域性變數,而在函式外定義的變數叫做外部變數,外部變數是全域性變數。全域性變數可以為本檔案中其他函式所共用它的有效範圍從定義變數的位置開始到本原始檔結束。建立全域性變數的作用是增加了函式間資料聯絡的渠道。2.譚浩強 書中對 全域性變數 的宣...