extern “C”的作用

     在一些頭文件中會有如下的預編譯定義:

     #ifdef __cplusplus
     extern "C" {
     #endif

     //函數聲明

     int c_func();

     #ifdef __cplusplus
     }
     #endif


     __cplusplus是C++編譯器定義的宏

     如果是C代碼包含上面的頭文件,則代碼中僅僅包含聲明:

     int c_func();

     如果是C++代碼包含上面的頭文件,則代碼中會包含:

     extern "C" {

     int c_func();

     }

     爲什麼要有這麼一段東西呢?假設有這樣一個場景:目前已經有了一個用C寫好的庫,現在用C++編寫另外的代碼,這段代碼需要用到這個C庫,由於C++有重載機制,C沒有,C++的編譯器會將函數聲明轉換成C++風格的聲明,而這個聲明和C函數聲明不一樣。如果沒有上面的extern “C",那麼C庫中的函數跟C++風格的聲明不一致,C++代碼鏈接C庫就會失敗,提示函數未定義的錯誤。

     extern "C"就是爲了保證函數聲明以C編譯風格處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章