推 LPH66: 你有試過把下面那種狀況的 a.o 和 c.o 連結起來嗎? 04/14 20:29
推 steve1012: 不是你想的這樣 你可以編譯看看 04/14 22:03
→ Caesar08: 下面會重複定義喔 04/15 01:12
推 Bencrie: 不會啊 04/15 02:06
推 chuegou: 下面不會重覆定義喔?所以c.c的x和b.h的x是分開的? 04/15 02:41
推 LPH66: 關於 c.c 的重覆定義問題, 我找到一個資料似乎表示在 C 裡 04/15 04:23
→ LPH66: int x; 是個 "tentative definition", 只在沒有其他定義時 04/15 04:24
→ LPH66: 才會成為定義, 這跟 C++ 的 odr 是不一樣的 04/15 04:24
→ LPH66: 所以原 PO 這裡大概也是因為這個原因 04/15 04:25
→ LPH66: c.c 裡的 int x = 1; 經由這個東西"漏出"到 a.c 裡去了 04/15 04:26
→ LPH66: OK, 既然有關鍵字就好找說明了: 04/15 04:31
→ LPH66: 在 C 裡在最上面寫 int x; 是和 extern 一樣具有外部連結性 04/15 04:31
→ LPH66: 所以 a.c 的 x 是這一個有外部連結性的 x 04/15 04:32
→ LPH66: c.c 的 x 則因為 tentative definition 規則的關係 04/15 04:32
→ LPH66: 取用到了 int x = 1; 這個 x (這時 int x; 對 c.c 沒用) 04/15 04:33
→ LPH66: 於是在連結時 a.c 的外部連結性的 x 就連上 c.c 裡的這個了 04/15 04:33
→ LPH66: 並不是什麼"漏出"的... 04/15 04:33
推 FRAXIS: 但是下面的 a.c 和 c.c 分別 compile 時 不會各有一個 x ? 04/15 08:00
推 Bencrie: 除非你給值或宣告 static 04/15 13:19