c語言全域性變數關於標頭檔案包含的問題

時間 2022-03-23 04:42:38

1樓:金魚

c語言在標頭檔案中包含全域性變數有三種形式:

1 、在標頭檔案中宣告乙個全域性變數,在乙個c檔案中定義全域性變數,然後在所有的引用了這個標頭檔案的c檔案裡都可以使用該全域性變數值。

如在main.c定義

int a = 3;

然後定義乙個main.h,那麼所有引用main.h的c檔案中,均可以訪問a並更改其值。

2 、在標頭檔案中定義乙個靜態全域性變數。那麼所有引用該標頭檔案的c檔案,均擁有乙個作用域在本檔案範圍內的同名靜態全域性變數。不同檔案中的該變數雖然同名,但卻是不同的變數。

比如在a.h中定義

static int a = 3;

那麼在a.c中引用a.h,並將a值修改為4。

在b.c中也引用a.h,不對a值做修改,列印a值,仍為3, 不會因為a.c中的修改而改變值。

3 、在標頭檔案中定義全域性變數。該標頭檔案僅可以被乙個c檔案引用一次。

比如a.h中定義

int a = 3;

在a.c中可以引用a.h,並對a進行訪問和修改。

如果在同專案下有b.c引用了a.h,編譯器在鏈結時會報同名全域性變數的錯誤,導致編譯失敗。

2樓:空雪夢見

因為這所謂的「全域性變數」只是在乙個程序中全域性,並不是在整個系統中全域性。

所以你的「同時執行」是啟動了兩個程序,每個程序都有它自己的int sum

更改乙個的值不影響另乙個

3樓:匿名使用者

在test2.c中,sum的值沒有變過,一直是0

而test1.c中,sum每列印一次就會++,是0、1、2.....

雖然他們都是使用的標頭檔案toto.h中的全域性變數,但test1與test2是兩個不同的程序,包含標頭檔案可以理解為把頭檔案的內容放到test1和test2的開頭,這樣,相當於只是test1和test2都有乙個自己的全域性變數sum,兩個sum之間是沒有關係的

4樓:匿名使用者

兩個程式直接的變數沒有關係.乙個程式看不到別的程式定義的東西

5樓:月下孤城

extern sum; 親,這個寫法說明是在vc6++上編譯的。要是其它是過不去的。

親,你說的列印不一樣,也就在這裡了。因為你在別的地方定義了sum這個變數。所以你extern sum;後,這個變數的值是從別的地方拿來用的。

當你兩個一起執行,printf("%d\n",sum++);這個語句會把sum的值改了,增加1。當test1.c執行完後,下在面的test2.

c中sum的值也會加1;test1.c每執行一次,test2.c呼叫都不一樣

還有你要看一下,你兩個檔案test1.c與test2.c在編譯的時候是不是把他們都納入進來了。這樣他們就會相當於乙個檔案了。這就是vc6++的好處,也是乙個弊端

6樓:

首先弄明白#include是什麼意思

#include的意思是把後面的被包含檔案的內容複製乙份放到當前檔案裡。

你在toto.h裡定義乙個全域性變數,這個標頭檔案分別被兩個c檔案包含,就相當於在兩個c檔案裡都定義了乙個全域性變數,這兩個全域性變數是獨立的。

另外,test1和test2都有自己獨立的main函式,所以最終生成可執行檔案時,兩個也是獨立的,不會干擾。

所以test1裡列印是遞增,不影響test2列印始終保持不變。

關於自定義標頭檔案在多個檔案中引用時提示重複定義的問題(c語言)

c 的全域性變數如何在其他原始檔引用,放在標頭檔案中有什麼利弊

7樓:匿名使用者

1、在函式原始檔中定義全域性變數,在引用它的地方extern進來2、放在標頭檔案的好處減少了程式**的冗餘,弊端是會重複引入編譯報錯,可講extern放入標頭檔案中

,這樣的話好處與前面的相同

其實沒有絕對的利弊,就好比在goto在實際開發中的運用,適合就是最好的

c語言,在乙個標頭檔案定義乙個列舉變數,有兩個c檔案用#include包含了這個標頭檔案,編譯錯誤:重複宣告成員

c語言的函式能不能呼叫全域性變數,C語言的函式能不能呼叫全域性變數?

當然可以呼叫全域性變數,這個程式報錯的原因是 x不是全域性變數 全域性變數就是在函式外面定義的變數,修改如下 include int x 注意這裡 void func int main void func int a x明顯是區域性變數,作用域只在main函式中x定義在函式外部時,才是全域性變數 比...

c語言工程裡其它檔案引用全域性變數

1.如何引用乙個已經定義過的全域性變數?答 extern 可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個編寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在...

C語言題目 全域性變數和靜態區域性變數

靜態區域性變數的 x 只有在incre 函式內部才存在,可見。在incre 函式外部,即main 函式內,x 3 所以要執行兩次迴圈 在第一次呼叫incre 函式後,x 2,因為這個x是靜態的,所以函式呼叫結束之後,靜態的x依然存在,且為2.注意,若不是靜態的,函式incre 呼叫之後,內部宣告的變...

C語言中全域性變數可以是非靜態變數嗎

在c語言中,全域性變數可以是非靜態變數的。原因如下 靜態變數的關鍵static對區域性變數和全域性變數的作用不一樣。對於區域性變數來說,用static修飾時,該變數在函式呼叫後的值一直保持上次的結果。對於全域性變數來說,用static修飾的全域性變數表示這個全域性變數只能在當前這個全域性變數定義的檔...

c如何設定全域性變數,C 中全域性變數如何設定?

可以在配製檔案中設定超級全域性變數,所有的類都可以用 新建乙個類 如 helper public class helper 這個類中的hpname是靜態字段 無需new,直接可以在其他窗體中通過helper.hpname 進行訪問和賦值。如 我在form1窗體中將他賦值為 小強 helper.hpn...