您好,登錄后才能下訂單哦!
extern "c"的主要作用就是為了能夠正確實現(xiàn)C++代碼調(diào)用其它C語言代碼。加上extern "c"后,會指示編譯器這部分代碼按照C語言的風(fēng)格進(jìn)行編譯。
由于C++支持函數(shù)重載,因此編譯器編譯函數(shù)的過程中會將函數(shù)的參數(shù)類型也加到編譯后的代碼中,而不僅僅是函數(shù)名;C語言并不支持函數(shù)重載,因此編譯C代碼的函數(shù)時不會帶上函數(shù)的參數(shù)類型,一般只包括函數(shù)名。
這個功能十分有用,因為在C++出現(xiàn)以前,很多代碼都是C語言寫的,而且底層的庫也是C語言寫的,為了更好的支持原來的C代碼和已經(jīng)寫好的C語言庫,需要在C++中盡可能的支持C,而extern "c"就是其中的一個策略。
這個功能主要用在下面的情況:
1、C++代碼調(diào)用C語言代碼
2、在C++的頭文件中使用
3、在多個人協(xié)同開發(fā)時,可能會出現(xiàn)有人編寫C代碼,有人能編寫C++代碼,這樣的情況也可以使用extern "c"。
extern "c"包含雙重語義,從字面上可以知道,首先,被他修飾的目標(biāo)是"extern"的;其次,被他修飾的目標(biāo)代碼是"C"的。被extern "c"限定的函數(shù)和變量
是extern的。
看這個例子: extern int a; 僅僅是一個變量的聲明,并不是在定義變量a,也沒有為a分配空間。變量a在所有模塊中作為一種全局變量只能被定義一次,否則會出錯。
extern "c"使用要點:
1、可以使單一語句。
extern "c" double sqrt(double)
2、可以使復(fù)合語句,相當(dāng)于復(fù)合語句中的聲明都加了extern "c"。
extern "c"
{
double sqrt(double);l
int min(int,int);
}
3、可以包含頭文件,相當(dāng)于頭文件中的聲明都加了extern "c"。
extern "c"
{
#include<cmath>
}
4、不可以將extern "c"添加到函數(shù)內(nèi)部。
5、如果函數(shù)有多個聲明,可以都加extern "c",也可以只出現(xiàn)在第一次聲明中,后面的聲明會接受第一個鏈接指示符的規(guī)則。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。