extern C和 cplusplus的使用

2021-08-29 23:46:44 字數 501 閱讀 1013

1. c語言檔案中有如下形式**:

#ifdef __cplusplus

extern "c"

#endif

2. 理解

這種形式的宣告表明如果該檔案被c++程式呼叫,使用c語言的語法形式編譯。

如果是c++程式,c++的編譯器如g++ 定義了巨集__cplusplus,此時使用extern "c"告訴c++編譯器下面的函式宣告等使用c語言的語法形式編譯。

這樣做的原因是因為c和c++的編譯器對函式的命名是不同的。之所以不同是因為c++支援函式的多型,即函式名相同,函式的引數型別或者個數不同。所以c++的編譯器在編譯之後函式的名稱中包含函式的引數型別及個數。而c語言不支援函式多型,函式名稱就只是函式名稱。

c++程式在呼叫c函式的時候,如果發現該函式的宣告是在extern "c"中,即使是使用c++的編譯器,函式的名稱也是按照c語言的語法進行命名。這樣就防止呼叫c函式的時候,因為函式名稱的不同找不到對應的函式。

參考:

extern C 的解釋和使用方法

ifdef cplusplus extern c 處理其中的 要明白為何使用extern c 還得從cpp中對函式的過載處理開始說起。在c 中,為了支援過載機制,在編譯生成的彙編碼中,要對函式的名字進行一些處理,加入比如函式的返回型別等等.而在c中,只是簡單的函式名字而已,不會加入其他的資訊.也就是...

C C 內聯函式和extern C 問題討論

今天討論下c c 的幾個覺問題。內聯 inline 函式 提到內聯函式,先看下面兩個程式,程式的執行結界都是為了得到兩個值相加之和 程式1int add int x,int y int main int argc,char ar 程式2 int main int argc,int ar 上面哪個程式...

extern c 用法解析

c 保留了一部分過程式語言的特點,因而它可以定義不屬於任何類的全域性變數和函式。但是,c 畢竟是一種物件導向的程式語言,為了支援函式的過載,c 對全域性函式的處理方式與c有明顯的不同。extern c 的主要作用就是為了能夠正確實現c 呼叫其他c語言 加上extern c 後,會指示編譯器這部分 按...