1樓:匿名使用者
連結器允許有型別和名稱相同的物件,但要在不同的作用域中,否則會違反唯一定義原則,無法分辨具體應該用哪個物件進行連結。
因此,不能是全域性物件。區域性物件的定義域是明確的,在不同的函式中可以有不同的同名同型別區域性物件(包括引數)。
解決方法
1.在一個編譯單元(例如.cpp檔案)中定義全域性物件,在另外的編譯單元中用extern宣告(而不是定義)這個物件,以保持唯一性。
2.每個編譯單元都定義物件,前面加上static修飾,表示僅在一個編譯單元中定義。這樣編譯器就會認為它們是不同的物件,連結器也不會混淆。
3.限定名稱空間。例如在不同的編譯單元中
//1.cpp
namespace a
//2.cpp
namespace b
a::p和b::p會被明確認為是不同的物件。
----
特別應當注意,不要在標頭檔案中定義非模板全域性物件,否則一旦被多個編譯單元包含,定義就會超過一次,於是出錯。
====
[原創回答團]
c語言 在不同的 .c 檔案中可以定義相同名稱的函式嗎? 10
2樓:匿名使用者
這當然都是不可以的,除非這幾個.c檔案不會相互呼叫,即不同時存在於一個工程之內,完全獨立沒有關係。
c語言中,不同的函式中,可以定義相同的 變數名嗎?
3樓:與子如初見
可以,區域性變數的生命週期僅僅存在於一個花括號之內。
4樓:藍很藍
看你在那裡定義了,在函式內定義是可以的,函式外不可以
5樓:摩羯卡薩諾瓦
可以,區域性變數是可以的,全域性變數是不可以重複的!
j**ascript中不同的函式定義中可以使用相同的變數名嗎?
6樓:會飛的身體
當然可以,不同的函式中當然可以使用相同的變數名,這不衝突。
c語言可以在不同的原始檔中定義相同名字的全域性變數嗎
7樓:山東路雲
拿vc試啊,剛花了幾分鐘實測了下,不加static,不管是否初始化,都是在連結的時候報重定義錯誤,如果加了static, 不管是否初始化,編譯連結都沒問題,只是不同的原始檔佔用不同的記憶體,也就是說已經是兩個不同的static全域性變數了。
8樓:
可以,因這個不是語法錯誤,一般是邏輯錯誤!而這種錯誤是看程式設計人員要怎麼使用變數的!
9樓:周生
全域性變數
既然是全域性的,你定義兩個怎麼辦?
10樓:空雪夢見
編譯會通過
連結會失敗
11樓:
不使用static的時候,兩個不同的原始檔都可以正常編譯,但會出現連結錯誤,原因是有兩個地方存在相同的變數,導致編譯器無法識別應該使用哪一個。
另外,而使用static的時候,你所定義的static變數如果是區域性的話,編譯的時候編譯器會將其重新命名,其他檔案就不會使用到這個檔案的static變數了,這樣就使得只在本檔案內有效;如果是全域性的話,就全域性可見,共享同一塊記憶體空間。
具體細節請參考《c++反彙編與逆向分析》(錢林松),裡面講的很詳細。
如有疑問可以追加問題,歡迎採納,謝謝!
12樓:
可以啊!直接新增變數即可。
13樓:春秋幾許隨緣化
區域性的static變數(函式內部的)只是函式內部可見,全域性的static變數(函式外面的)應該是隻有當前原始檔可見
c 語言,不同的函式中可以使用相同名字的變數嗎?
14樓:白菜一顆
可以,在函式內定義的變數屬於區域性變數,只作用於本函式
15樓:匿名使用者
可以啊,那是區域性變數。作用域是函式內部
c語言全域性變數問題。 現有2個檔案,被放在同一個工程中。如果在兩個檔案的函式外部定義同名的變數,
16樓:海納百川文淵閣
若兩邊都初始化了,那是定義,就是重定義了,逐檔案編譯時無錯,但連結時會報錯。
若只有一邊或兩邊都未初始化,vs.net及devc++中實測這是可行的,編譯器會把其中一處處理成定義,其他處認作宣告。
其實還可在不同檔案中定義同名但型別不同的變數,不信可試試。
全域性變數可不可以定義在可被多個.c檔案包含的標頭檔案中?為什麼
17樓:我是真的真幸福
賦值才佔記憶體單元,宣告不佔,宣告一次時連結就不會出錯
算式中,不同的漢字代表不同的數字,相同的漢字代表相同的數字。求「數學比賽」這個四位數。(要答案 算
賽x賽,尾數還是賽,所以賽只能代表0 5 6 其中0不可 能,因為數學比賽x賽不等於賽賽賽賽 6也不可能,因為6x6 36進3,所以 比 x6 3的尾數必須為 比 這個 比 不可能找到。所以 賽 只能取5,比x賽的結尾還是賽,所以比必須為奇數且不為5,挨個試下可得到 比 為7.注意,數學比賽x賽,還...
python中,定義的函式中的引數是什麼形式的?怎麼覺得和C中的靜態型別有點相似
嗯。同感。我感覺,它和c中靜態變數的引用,是一樣的 這樣說更客觀點 我的理解 python對具有相同 值 的同一資料型別在內部只有一個例項,任何專引用它的變數都是這個實屬例的一個 引用 指標 只有當這個變數會修改這個例項內容時才會產生新的例項並改變這個變數的指向。如 str a str2 a pri...
linux下python定義的函式可以直接呼叫?還是要設定環
肯定不可能直接bai呼叫。只知道 root bashrc,新增以du下行 alias mycodedir cd root source code 儲存,zhi然後重新dao啟動,以後在命令列輸回入mycodedir 即可執行命答令 cd root source code 這種方式的 首先編bai寫d...