如何在c語言中定義及引用全域性變數

2021-08-21 00:08:08 字數 1742 閱讀 2728

1樓:匿名使用者

1、全域性變數也稱為外部變數,它是在函式外部定義的變數。

它不屬於哪一個函式,它屬於一個源程式檔案。其作用域是整個源程式。在函式中使用全域性變數,一般應作全域性變數說明。

只有在函式內經過說明的全域性變數才能使用。全域性變數的說明符為extern。

但在一個函式之前定義的全域性變數,在該函式內使用可不再加以說明。外部變數是在函式外部定義的全域性變數,它的作用域是從變數的定義處開始,到本程式檔案的

結尾。在此作用域內,全域性變數可為各個函式所引用。編譯時將外部變數分配在靜態儲存區。

有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。

也可用static宣告外部變數,使該變數不能被其他檔案引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

2、定義及引用方法:

#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 檔案中定義一次就可以了。

2樓:匿名使用者

舉個例子

#include

int a =0;//這裡不就是定義了一個全域性變數a了嗎int main()

3樓:紫月居士

全域性常量定義,在主函式體外部直接呼叫預處理命令#define 常量名 量值

引用時可以再任意函式體內直接呼叫該常量名

全域性變數定義,變數不存在全域性概念,只有相對概念。你可以通過宣告作用域來進行宣告。比如:

std::a。這就是一種。

4樓:

如果全域性變數在同一個c檔案中,則可以直接去使用這個全域性變數,就像樓上(zsx10110)舉的那個例子一樣,但是在另外一個c 檔案中還想繼續使用這個變數的時候就需要使用extern來宣告引用這個全域性變數了,比如說你把全域性變數定義宣告在a.c檔案中的,你在b.c檔案中也想使用,則在裡面加上這句extern int a;(int a是你在a.

c中定義的,視實際情況而定)

5樓:匿名使用者

放置於主函式之前定義的變數。

c語言中怎麼保留小數2位,C語言中如何保留一位小數點

在c語言中讓一個數保留2位小數可以通過精度限定符來完成,精度限定符有一個點號後跟一個整陣列成。其準確含義依賴於它所修飾的資料型別。示例如下 include int main c語言的主要特點 優點1 簡潔緊湊 靈活方便 c語言一共只有40個關鍵字,9種控制語句,程式書寫形式自由,區分大小寫。把高階語...

c語言中如何依次輸入陣列中元素,C語言中如何依次輸入陣列中元素

include int main int a 17 int i for i 0 i 17 i scanf d a i return 0 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const char format argument 返回值 字串長...

C語言中如何刪除已經輸出的字元,C語言中如何刪除已經輸出的一個字元?

文字模式下指定位置輸出 用 覆蓋掉 gotoxy 1,1 printf 1230123 gotoxy 7,1 printf 例 include intmain void printf 123 printf b c b 32 注意這裡 return0 擴充套件資料c語言刪除字串前面連續 號 voidf...