其實我比較熟悉的是 C++ 不熟悉 C,所以我一直腦中有個 One Definition Rule 的教條
所以在我認知中,若兩個連結的模組,是不能有相同的變數定義,這會造成重複定義的錯誤
我的補充內容網址有人爭論道:The code is breaking the rule, not the compiler
不過這個網址的例子是 main 去連結兩個 .so 中的共同名稱變數結果會跟連結順序有關
小弟另外好奇的是如果其中一個 .so 引用另一個 .so 但兩個同時有相同名稱變數會怎樣
我不清楚會發生忽略這樣的事情,所以是 C 會這樣嗎?
因為我想這樣好像怪怪的,變成你使用某個變數,你以為
在用 A.so 這一個但其實是在用 B.so 這一個,好像滿恐怖的
現在把 main 裡面的 function_error這一行刪除,在編譯時搜尋完A時,在main中,已經沒有未定義的object了,但他會發現function使用了so2,這裡要注意,如果function沒有使用so2那接下來的步驟將不會執行,當他發現so2未定義時,他會繼續搜尋B,當他搜索到B的function他會去比對so2的變數名稱,function與so2是不同,所以他會繼續搜尋下去,不會對function做任何處理,因為這一步是要定義so2,而非function,當他定義完so2時,他會結束搜尋,也就是說它會對B的function視若無睹。
我的疑惑: