看板 C_and_CPP 關於我們 聯絡資訊
其實標題不太會下......主要是不太懂以下的問題 以下是簡單的測試小程式 main.cpp =========== extern "C"{ #include "Foo.cpp" } int main() { Foo(); return 0; } Foo.h =========== void Foo(); Foo.cpp =========== //extern "C"{ #include "Foo.cpp" } void Foo() { 實作 } 請教一下 遮掉那行 加和不加 在compiler的角度上有什麼差異嗎? 因為跟compiler那些link的原理完全不懂...... 就我自己測試 結果推測是 main.obj 要去link _foo時(因為是extern C版本的關係才要去找_Foo嗎????) 剛好如果Foo.cpp沒加那行的話 Foo.obj 紀錄的會是 _Foo_Void_之類的,......大家是稱做symbol嗎? 導致link不到.....?? 如果加了 compiler就會自動把 Foo.obj包含的symbol名稱就還是維持_Foo 結論 是compiler要build這cpp 發現他有宣告 就會依照宣告什麼把他寫定義的名字改成宣告的名字 沒寫就C++的mangling? 以上是推測.... 請指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.15.66
tinlans:對。但是我習慣定義前面也再打一次。 06/07 19:41
loveflames:extern "C"{ #include "Foo.cpp" } ←自己include自己? 06/07 19:51
Bencrie:應該只是筆誤吧 06/07 19:53
QQ29:喔筆誤抱歉是.h@@ 06/07 20:03
james732:薦書《程式設計師的基本修養》 有講linker、loader這些 06/07 20:11