C語言可以在不同的原始檔中定義相同名字的全域性變數嗎

時間 2021-07-08 21:57:09

1樓:山東路雲

拿vc試啊,剛花了幾分鐘實測了下,不加static,不管是否初始化,都是在連結的時候報重定義錯誤,如果加了static, 不管是否初始化,編譯連結都沒問題,只是不同的原始檔佔用不同的記憶體,也就是說已經是兩個不同的static全域性變數了。

2樓:

可以,因這個不是語法錯誤,一般是邏輯錯誤!而這種錯誤是看程式設計人員要怎麼使用變數的!

3樓:周生

全域性變數

既然是全域性的,你定義兩個怎麼辦?

4樓:空雪夢見

編譯會通過

連結會失敗

5樓:

不使用static的時候,兩個不同的原始檔都可以正常編譯,但會出現連結錯誤,原因是有兩個地方存在相同的變數,導致編譯器無法識別應該使用哪一個。

另外,而使用static的時候,你所定義的static變數如果是區域性的話,編譯的時候編譯器會將其重新命名,其他檔案就不會使用到這個檔案的static變數了,這樣就使得只在本檔案內有效;如果是全域性的話,就全域性可見,共享同一塊記憶體空間。

具體細節請參考《c++反彙編與逆向分析》(錢林松),裡面講的很詳細。

如有疑問可以追加問題,歡迎採納,謝謝!

6樓:

可以啊!直接新增變數即可。

7樓:春秋幾許隨緣化

區域性的static變數(函式內部的)只是函式內部可見,全域性的static變數(函式外面的)應該是隻有當前原始檔可見

c語言問題 區域性變數能不能和全域性變數重名?

8樓:花落へべ若相惜

可以,只不過區域性變數可以覆蓋全域性的,就是在區域性變數的範圍內全域性變數不起作用

9樓:與子如初見

能,區域性會抄遮蔽全域性

。要用襲全域性變數,需要使用 "::" ;

區域性變數bai

可以與全域性變數同名du

,在函zhi數內引用這個變數時,會用到dao同名的區域性變數,而不會用到全域性變數。對於有些

編譯器而言,在同一個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義一個同名的區域性變數,而那

個區域性變數的作用域就在那個迴圈體內。

c語言中如何引用其它c原始檔中的函式

果果和糰子 在原始檔a1.c中呼叫a2.c 中的函式有兩種方法 1 在a2.c中有完整的函式定義,在a1.c中新增一下要用到的函式原型 宣告 就可以了,例如 在a2.c中 有函式void a2 在a1.c中 在檔案前頭增加一行 void a2 就可以了。2 把a2.c中完整定義的函式的原型,寫到一個...

C語言中定義結構體如何在不同的 C檔案中使用

家谷秋魯曠 struct node 這樣就定義了一個結構體型別node,它有兩個int型別的成員,分別是a和b,定義變數是用 struct node st a 這樣的形式.例如,上式就定義了一個名為st a的結構體變數 橙心橙願 比如三個.c檔案一個.h檔案 c 2.c 3.c 4.h這三個標頭檔案...

c語言巨集定義及多個檔案的問題,c語言多個檔案都用到同一個巨集和結構,那麼巨集定義和結構定義應該放在哪個檔案合適呢?

小白範 c語言編譯器gcc編譯過程 先分檔案編譯,每個檔案編譯成一個目標程式。最後將目標程式 連結 在一起,形成可執行程式。注意 只編譯.c檔案,不編譯.h標頭檔案。在編譯ma.c時,先將標頭檔案的內容拷貝過來,變成 ifndef type define type 2 endif void p vo...