在C++ 程序中調用被C 編譯器編譯后的函數,為什么要加extern “C”?


答:首先,extern是C/C++語言中表明函數和全局變量作用范圍的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變量可以在本模塊或其它模塊中使用。
通常,在模塊的頭文件中對本模塊提供給其它模塊引用的函數和全局變量以關鍵字extern聲明。extern "C"是連接申明(linkage declaration),被extern "C"修飾的變量和函數是按照C語言方式編譯和連接的。作為一種面向對象的語言,C++支持函數重載,而過程式語言C則不支持。函數被C++編譯后在符號庫中的名字與c語言的不同。例如,假設某個函數的原型為:void foo( int x, int y );該函數被C編譯器編譯后在符號庫中的名字為_foo,而C++編譯器則會產生像_foo_int_int之類的名字。這樣的名字包含了函數名、函數參數數量及類型信息,C++就是靠這種機制來實現函數重載的。
所以,可以用一句話概括extern “C”這個聲明的真實目的:解決名字匹配問題,實現C++與C的混合編程。

補充說明:用Dependecy軟件可以看到DLL中的函數原型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM