C++中extern “C”含義深層探索

一直以來,對於一些標準文件中的header,老是有
#ifndef XXX
#define XXX
...
#endif
或是
extern "C" {
...
}
感到習慣和不解,既習慣於他們的出現,又覺得幹嘛加這些東西。

但是在看了這篇文章後,才發現他們真正的意義。

第一項的define macro,是為了避免header file被重複引用,這樣有時候在compile的時候,就會出現duplicate definition的問題。

第二個的extern "C"呢,則是為了能夠在C++中繼續相容C的Code跟Library。
因為C++在compile的時候,為了overloading的這個feature,所以都會對function name換成他內部mapping的; 而C則只是在function name前加上 _ ,這會使的我們在C++中Linking C的Library時,會有問題。

extern "C" 包含雙重含義,從字面上即可得到:首先,被它修飾的目標是“extern”的;其次,被它修飾的目標是“C”的。
"extern C" 一行會告訴編譯器:送到 linker 的外部資訊要採用 C 的呼叫慣例及簽名編碼法(譬如,前置一個底線)。既然 C 沒有多載名稱的能力,你就不能讓 C 程式能同時呼叫得到多載的函數群。

張貼留言

注意:只有此網誌的成員可以留言。