最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
毕节市| 铜陵市| 繁峙县| 民乐县| 宜黄县| 鄂州市| 新平| 乌兰浩特市| 宁阳县| 昆山市| 许昌市| 翁牛特旗| 阳信县| 息烽县| 黔南| 南汇区| 威海市| 陇西县| 岑巩县| 阿鲁科尔沁旗| 新野县| 桑日县| 开封市| 靖安县| 稷山县| 武安市| 赣榆县| 梧州市| 深圳市| 上饶县| 抚州市| 孟连| 日土县| 新营市| 定南县| 盐边县| 丰台区| 鱼台县| 锦屏县| 永昌县| 门头沟区|