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

2021-07-08 21:57:20 字數 1165 閱讀 1909

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檔案中使用

直接在b.c中重新定義一下,把a中的定義複製貼上一下,簡單粗暴。或者把a中的巨集定義改寫到標頭檔案中。例如定義hong 為 1234,標頭檔案裡寫 ifndef hong define hong 1234 endif 前後兩句是保護,避免標頭檔案多次 include 時 重複定義hong 在b.c檔...

C語言程式設計中陣列的定義,c語言陣列的定義

這種題目一般不希望設計記憶體管理。所以一般都是進可能給一個比較大的陣列。例如a 10 表示位數不會超過十,你輸入的時候需要個索引記錄a陣列有效的位數。使用的時候,只使用有效位數。肯定會有一段記憶體不用的。或多或少。這就是陣列儲存動態資料特點。如果記憶體管理的話,你設計個增量比如5.一旦索引告訴你10...

在C語言學習中什麼叫巨集定義,在C語言中巨集是什麼意思?

巨集定義是高階語言編譯器提供的常用語法,其目的是利用某一識別符號標識某個文字字串。在編寫程式時,如果程式中反覆地使用某個資料或某段程式片段,就可以考慮將這個資料或程式片段定義為巨集,然後每個出現該資料或程式片段的地方用巨集名替代,這樣做的好處是程式簡潔,可讀性好,而且當需要修改這些相同的程式片段時,...