五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C/C++編程筆記:在C++中如何調(diào)用C語(yǔ)言的代碼?你可以這樣做

2020-07-31 22:16 作者:C語(yǔ)言編程__Plus  | 我要投稿

很多初學(xué)的小萌新,第一反應(yīng)很有可能是:直接調(diào)用就完事了!這樣說(shuō)也沒(méi)錯(cuò),因?yàn)镃++本來(lái)就包含了C。比如在C文件中存在一個(gè)函數(shù)func_c(), 該文件與C++的工程混編在一起時(shí),可以直接在C++中調(diào)用C文件中的func_c();不需要做任何額外處理。


不過(guò)在C中,不可以調(diào)用C++的接口,也不能直接調(diào)用C語(yǔ)言的一些API,否則編譯會(huì)出錯(cuò)。這個(gè)時(shí)候呢,就需要我們今天的主角:extern "C"了!

為什么要是用?extern "C"

在進(jìn)行C++開(kāi)發(fā)的時(shí)候,由于C、C++編譯規(guī)則是不同的。C++編譯函數(shù)方法是使用mangle的技術(shù)


而在C語(yǔ)言中是沒(méi)有這個(gè)技術(shù)的,所以如果我們想要調(diào)用C語(yǔ)言開(kāi)發(fā)的一些API,就需要使用?extern "C"修飾C語(yǔ)言的函數(shù)聲明。

extern "C"用法

(1)直接在函數(shù)前面加上?extern "C"?關(guān)鍵字

extern "C" void fun() {

printf("test");

}

(2)如果有函數(shù)聲明與函數(shù)實(shí)現(xiàn),要讓函數(shù)聲明被?extern "C"?修飾,函數(shù)實(shí)現(xiàn)可以不修飾

extern "C" void func();

void func() {

cout << "func()" << endl;

}

(3)如果有多個(gè)函數(shù)要被extern "C"?修飾,可以直接用{}包裹

extern "C" {

void func();

void func1();

}

void func() {

cout << "func()" << endl;

}

void func1() {

cout << "func1()" << endl;

}

自定義C語(yǔ)言函數(shù)庫(kù)

但是我們每次使用C語(yǔ)言的API都用這個(gè)extern "C"修飾那是不是太麻煩了,那我們學(xué)會(huì)了怎么去使用extern "C",我們可以在編寫(xiě)C語(yǔ)言API庫(kù)的時(shí)候,直接使用這個(gè)來(lái)修飾,那么C++再去調(diào)用的時(shí)候就不用這么麻煩了,直接使用這個(gè)函數(shù)就可以了。


但是這么定義的話就會(huì)產(chǎn)生另一個(gè)問(wèn)題,那么就是無(wú)法在C語(yǔ)言文件中調(diào)用這個(gè)庫(kù)

因?yàn)樵贑語(yǔ)言中是沒(méi)有extern "C"這個(gè)關(guān)鍵字的。調(diào)用這個(gè)庫(kù),就是直接把這個(gè)庫(kù)的文件代碼拷貝過(guò)來(lái)。例如:


那么我們就需要在定義這個(gè)sum庫(kù)的時(shí)候加上一些約束規(guī)則,讓他在被C++調(diào)用的時(shí)候加上?extern "C"?關(guān)鍵字,在被C語(yǔ)言調(diào)用的時(shí)候去掉這個(gè)關(guān)鍵字。


__cplusplus這個(gè)宏是C++中特有的。它在加載C++文件的時(shí)候會(huì)提前定義這個(gè)宏,所以我們只要判斷文件中是否有這個(gè)宏,有的話就是C++在調(diào)用,沒(méi)有的話就是C語(yǔ)言,這樣就可以很好地解決了這個(gè)混合調(diào)用的問(wèn)題。

希望對(duì)你有幫助!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來(lái)成長(zhǎng)!
另外,UP在主頁(yè)上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~

C/C++編程筆記:在C++中如何調(diào)用C語(yǔ)言的代碼?你可以這樣做的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
竹山县| 孝义市| 福安市| 汽车| 延川县| 洱源县| 康定县| 博白县| 天等县| 新安县| 青浦区| 屏边| 当雄县| 英山县| 武宁县| 鄂伦春自治旗| 东平县| 安庆市| 忻州市| 比如县| 扶沟县| 长子县| 綦江县| 溧水县| 普兰县| 晋江市| 西乌| 郁南县| 本溪市| 平武县| 繁峙县| 秦安县| 仙居县| 华阴市| 黑龙江省| 加查县| 太原市| 峡江县| 石景山区| 砀山县| 乌拉特中旗|