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

2021-06-27 07:52:07 字數 2333 閱讀 6299

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

單個檔案中的全域性變數

簡單一點說,

全域性變數就是在函式外面定義的變數

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

全域性變數的作用域為其定義位置開始,至檔案結尾,也即只有檔案作用域

。#include 「stdio.h」

int a = 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擴充套件全域性變數的作用域

#include 「stdio.h」

extern int g_c; //宣告這是乙個外部全域性變數

int g_a = 1; //全域性變數

void fun1()

int g_b = 2; //全域性變數

void main()

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

3. 限制全域性變數只能在乙個檔案中有效

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

為了能夠實現

在不同的檔案中使用相同名字的全域性變數

,static關鍵字就派上用場了,在《

c/c++中靜態區域性變數的特點與應用

》中我們已經說過static關鍵字了,用static修飾的區域性變數只能在定義變數的函式中使用,那麼用

static修飾的全域性變數也就只能在定義其的檔案中使用

了,這就是傳說中的靜態全域性變數。

#include 「stdio.h」

extern int g_c; //其他檔案中定義的全域性變數

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

void fun1()

int g_b = 2; //全域性變數

void main()

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

【以上**

知蟻部落格,位址

實際工作中,如何定義全域性變數呢?

在c++中定義全域性變數是應該盡量在.cpp檔案中定義,而不要在.h 檔案中 定義,定義好了之後,可以在.h檔案中利用 extern關鍵字進行 宣告.如果在.h檔案中定義的話,多層包含可能會引起重複定義的錯誤.下面是乙個示例

在base.cpp中定義全域性變數

base.cpp

int g_maxtime;

int g_mintime;

int g_maxcount;

int g_mincount;

base.h

extern int g_maxtime;

extern int g_mintime;

extern int g_maxcount;

extern int g_mincount;

然後其他檔案要使用這些變數的時候

只要#include "base.h"就可以了,而且不會引起重複定義的錯誤

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

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

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中引用 ...