答:首先,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中的函數原型