C關鍵字extern除了對全局變量和函數的修飾作用外,在C++和C的混合編譯中也承擔著重要角色。初次接觸混合編譯的程序員經常遇到的一個問題就是 在C++環境下使用C函數的時候,常常出現編譯器無法找到C函數定義的鏈接錯誤。其原因就是因為C++語言為了解決函數的多態問題,會將函數名和參數聯合起來生成一個中間的函數名稱(mangled name)。此時對C函數用extern “C”進行鏈接指定,告訴編譯器,按照C語言的命名習慣在庫中查找函數。
經常寫成以下格式:
#ifdef __cplusplus
extern "C"{
#endif
…
…
#ifdef __cplusplus
}
#endif
extern "C" 是C++的語法, 在C語言中不能直接引用,否則編譯報錯。