Re: [問題] extern "C"的問題

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/06/10 15:48), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串5/5 (看更多)
※ 引述《littleshan (我要加入劍道社!)》之銘言:

06/10 15:22,
以上的 code 可以順利 compile、link 並執行<<<上面這邊我用
06/10 15:22

06/10 15:22,
VC的話 他link不到耶 所以我說他認不到...
06/10 15:22
我又必須為自己的衝動回文道歉了 XD struct A; struct B; A* foo(); B* foo(); 上述兩種版本的 foo() 具有相同的 function signature 所以它們無法 overload 上述的程式會發生 compile error 但 C++ 並未規定 name mangling 的方式 所以若是 compiler 讓 return type 也成為 name mangling 的一部份 也算是合理的做法 只要它能保證: 1. 參數型別不同的 function 具有不同的 symbol name 2. 宣告式完全吻合的 function 具有相同的 symbol name 3. 禁止具有相同 signature 的 function overloading (這邊先不管 covariant return type) VC 會把 return type 加入 name mangling 中 在 VC8 會把 FU* foo() 轉成 ?foo@@YAPAUFU@@XZ 的名稱 但 GCC 就不會包含 return type FU* foo() 會變成 _Z3foov -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.151.2 ※ 編輯: littleshan 來自: 219.87.151.2 (06/10 15:49)

06/10 17:01, , 1F
原來如此 受教了!!謝謝大大
06/10 17:01, 1F

06/15 21:53, , 2F
你多衝動幾次沒關係!!這樣可以造福有心學習的初學者
06/15 21:53, 2F
文章代碼(AID): #1ABsKyBn (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ABsKyBn (C_and_CPP)