使用extern "C" 主要是因爲C編譯器編譯函數時不帶參數的型別資訊,只包含函數的符號名字。如
int foo( float x )
C編譯器會將此函數編譯成類似_foo的符號,C聯結器只要找到了呼叫函數的符號,就認爲連線成功。
而C++編譯器爲了實現函數過載,會在編譯時帶上函數的參數資訊。如它可以把上面的函數編譯成類似於_foo_float這樣的符號。
所以,C呼叫C++,使用extern "C"則是告訴編譯器依照C的方式來編譯封裝介面,當然介面函數裏面的C++語法還是按C++方式編譯。
C語言不支援函數過載