C C 中全域性變數的那些事兒

2022-07-24 12:15:16 字數 1737 閱讀 8201

c/c++中的變數分為全域性變數、靜態全域性變數、區域性變數和靜態區域性變數,在《c/c++中靜態區域性變數的特點與應用》中我們介紹過靜態區域性變數,今天我們的目標是全域性變數。

簡單一點說,全域性變數就是在函式外面定義的變數,下面是乙個最簡單的例項,一共定義了兩個int型的全域性變數a和b,這兩個全域性變數定義的位置不大相同,a定義在函式fun1之前,而b定義在之後,a和b都定義在函式main之前,從使用情況看全域性變數a可以在其後面的所有函式中使用,而全域性變數b只能在函式main中使用,不能在其定義之前的函式fun1中使用。因此,我們可以得出這樣的結論:全域性變數的作用域為其定義位置開始,至檔案結尾,也即只有檔案作用域

c++語言: 知蟻部落格

#include 「stdio.h」

inta

=1;    //這就是個全域性變數啦

void

fun1() //這個函式只能使用全域性變數a,不能用b

int b =

2; //這也是個全域性變數

void

main() //這裡a b都可以用

前面講過,全域性變數的作用域起始於定義的地方直到檔案結尾,那豈不是就沒法在其他檔案中使用了啊。從c/c++現在nb的程度上看,這個事情是不可能的,要是這樣那還了得。為了使全域性變數的作用域擴大到多個檔案中,c++中提供了extern關鍵字。

下面例項**中的extern int g_c;是做乙個宣告,說這個變數g_c是乙個全域性變數啊,你們隨便用,g_c本身在其他檔案中定義(在本檔案中定義也可以,不過要保證其他檔案中沒有定義過),這樣就將全域性變數的作用域擴大到多個檔案了。

全域性變數只要在乙個檔案中定義後,在其他需要使用的原始檔中只要使用extern關鍵字,即可在該檔案中使用,概括下就是:extern擴充套件全域性變數的作用域

c++語言: 知蟻部落格

#include 「stdio.h」

extern

intg_c; //宣告這是乙個外部全域性變數

intg_a

=1;    //全域性變數

void

fun1()

intg_b

=2; //全域性變數

void

main()

上做了一點小小的更改,把所有的全域性變數全部加上g_字首,用以表示這是乙個全域性變數。

剛才好不容易才把全域性變數的作用域擴充套件到多個檔案了,幹嘛現在又要限制呢?這是因為雖然全域性變數定義後不使用extern關鍵字的話只能在本檔案中使用,但是如果你在其他檔案中定義同樣名字的全域性變數的話,那是不允許滴(在鏈結的時候會出錯),至於詳細原因以後再說。

為了能夠實現在不同的檔案中使用相同名字的全域性變數,static關鍵字就派上用場了,在c/c++中靜態區域性變數的特點與應用中我們已經說過static關鍵字了,用static修飾的區域性變數只能在定義變數的函式中使用,那麼用static修飾的全域性變數也就只能在定義其的檔案中使用了,這就是傳說中的靜態全域性變數。

c++語言: 知蟻部落格

#include 「stdio.h」

extern

intg_c; //其他檔案中定義的全域性變數

static

intg_a

=1;    //靜態全域性變數 限本檔案中使用

void

fun1()

intg_b

=2; //全域性變數

void

main()

通過static修飾後,我們就可以在不同的檔案中使用相同名字的全域性變數而不會出現鏈結錯誤了。

知蟻部落格

C C 中全域性變數的那些事兒(

c c 中的變數分為全域性變數 靜態全域性變數 區域性變數和靜態區域性變數,在 c c 中靜態區域性變數的特點與應用 中我們介紹過靜態區域性變數,今天我們的目標是全域性變數。單個檔案中的全域性變數 簡單一點說,全域性變數就是在函式外面定義的變數 下面是乙個最簡單的例項,一共定義了兩個int型的全域性...

c c 中全域性變數

c c 中的變數分為全域性變數 靜態全域性變數 區域性變數和靜態區域性變數,在 c c 中靜態區域性變數的特點與應用 中我們介紹過靜態區域性變數,今天我們的目標是全域性變數。簡單一點說,全域性變數就是在函式外面定義的變數,下面是乙個最簡單的例項,一共定義了兩個int型的全域性變數a和b,這兩個全域性...

C C 定義全域性變數的方法

我們想定義乙個全域性變數,能夠在多個檔案中使用,舉例說明比如說三個檔案main.c hello.c hello.h 想在main.c和hello.c中使用乙個名字為a的變數,可能大家會簡單地想直接在hello.h裡面定義乙個變數unsigned int a 然後在main.c和hello.c中引用 ...