C 學習軌跡之extern C作用

2021-10-11 21:48:56 字數 977 閱讀 9540

1.extern "c"的主要作用就是為了能夠正確實現c++**呼叫其他c語言**。加上extern "c"後,會指示編譯器這部分**按c語言(而不是c++)的方式進行編譯。由於c++支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的**中,而不僅僅是函式名;而c語言並不支援函式過載,因此編譯c語言**的函式時不會帶上函式的引數型別,一般只包括函式名。

2.這個功能十分有用處,因為在c++出現以前,很多**都是c語言寫的,而且很底層的庫也是c語言寫的,為了更好的支援原來的c**和已經寫好的c語言庫,需要在c++中盡可能的支援c,而extern "c"就是其中的乙個策略,c++**呼叫c語言**

3.在多個人協同開發時,可能有的人比較擅長c語言,而有的人擅長c++,這樣的情況下也會有用到

看乙個簡單的例子:

有modulea、moduleb兩個模組,b呼叫a中的**,其中a是用c語言實現的,而b是利用c++實現的,這兩個模組分別用不同的編譯器編譯,所以不同的編譯器會給它命不同的名字,導致出錯。

4.比如說你用c 開發了乙個dll 庫,為了能夠讓c ++語言也能夠呼叫你的dll 輸出(export) 的函式,你需要用extern 「c」 來強制編譯器不要修改你的函式名,因為如果不用extern "c"宣告,那麼經過c++呼叫,g++編譯器編譯後,名字都會被修改。

5.基本支援函式過載的語言都需要進行函式匯出名命名。目的就是為了給過載的函式不同的簽名,以避免呼叫時的二義性呼叫。

使用extern 「c」使得匯出函式名稱和實際名稱一致,extern 「c」:告訴編輯器按c語言的方式設定函式的匯出名,不同的編譯器、不同的語言,對函式名的修改都有可能不同,即匯出名不同。

6.我們可以想象,為了新增一些功能,我們可以選擇重新修改源程式,再重新編譯;還可以使用動態鏈結庫,將要新增的功能外掛程式另外寫乙個源程式,然後將其和其他功能外掛程式重新編譯成乙個新的動態鏈結庫。

7.執行乙個函式最重要的是其函式名,即函式入口位址。

C 之 extern C的作用詳解

extern c 的主要作用就是為了能夠正確實現c 呼叫其他c語言 加上extern c 後,會指示編譯器這部分 按c語言的進行編譯,而不是c 的。由於c 支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的 中,而不僅僅是函式名 而c語言並不支援函式過載,因此編譯c語言 的函式...

C 裡面extern 「c」 的作用

c 裡面extern c 的作用 extern c 表示編譯生成的內部符號名使用c約定 例如 int fun int i,int j c fun c fun int int 當我們想從c 中呼叫c的庫時,不能僅僅說明乙個外部函式,因為呼叫c函式的編譯 和呼叫c 函式的編譯 是不同的。如果你僅說明乙個...

C語言學習之extern C

extern c 的主要作用就是為了能夠正確實現c 呼叫其他c語言 加上extern c 後,會指示編譯器這部分 按c語言的進行編譯,而不是c 的。由於c 支援函式過載,因此編譯器編譯函式的過程中會將函式的引數型別也加到編譯後的 中,而不僅僅是函式名 而c語言並不支援函式過載,因此編譯c語言 的函式...