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源程式嗎

吉祥二進位制 c語言檔案包含的預處理命令是 include。從純粹的文字檔案來說,include的作用就是搜尋它後面指示的檔案,並把這個檔案的內容加到當前的檔案中。一般程式設計時,都是包含一些與.h為字尾的標頭檔案,但是它可以包含任何字尾的任何形式的text檔案的,而不僅僅是.h為字尾的標頭檔案,也...

c語言標頭檔案中定義結構體的問題,C語言標頭檔案中定義結構體的問題

c語言程式設計中,為防止標頭檔案在同一編譯單元被重複引用,常引入 ifndef巨集來進行保護,如 標頭檔案my head.h ifndef my head h 如果沒有定義巨集 my head h define my head h 則,定義該巨集名 以下是被保護的 區 進行相應的全域性變數和結構體型...

c語言怎樣才能在標頭檔案中實現函式定義

標頭檔案和原始檔沒什麼兩樣,可以直接定義,但是在標頭檔案中使用定義是違背初衷的做法,是應該杜絕的 唐博 正常的函式是不可以在標頭檔案中定義的,除非你將函式定義成行內函數。在定義函式的時候,前面加上inline 就可以了。如 inline int a 但是行內函數是c 裡面的,可能c的編譯器會不支援。...